Steppers exist to enable creating Java streams over Scala collections, see
scala.jdk.StreamConverters. Besides that use case, they allow iterating over collections
holding unboxed primitives (e.g.,
Array[Int]) without boxing the elements.
Steppers have an iterator-like interface with methods
nextStep(). The difference
to iterators - and the reason
Stepper is not a subtype of
Iterator - is that there are
hand-specialized variants of
Double (IntStepper, etc.).
These enable iterating over collections holding unboxed primitives (e.g., Arrays,
scala.jdk.Accumulators) without boxing the elements.
The selection of primitive types (
Double) matches the hand-specialized
variants of Java Streams (java.util.stream.Stream, java.util.stream.IntStream, etc.)
and the corresponding Java Spliterators (java.util.Spliterator, java.util.Spliterator.OfInt, etc.).
Steppers can be converted to Scala Iterators, Java Iterators and Java Spliterators. Primitive Steppers are converted to the corresponding primitive Java Iterators and Spliterators.