Stream.iterate() mit Prädikat
Ein Prädikat zum Beenden der Iteration verwenden – wie eine for-Schleife als Stream.
Code-Vergleich
✕ Java 8
Stream.iterate(1, n -> n * 2)
.limit(10)
.forEach(System.out::println);
// can't stop at a condition
✓ Java 9+
Stream.iterate(
1,
n -> n < 1000,
n -> n * 2
).forEach(IO::println);
// stops when n >= 1000
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Natürlicher Abbruch
Stopp basierend auf einer Bedingung, nicht einem willkürlichen Limit.
For-Schleifen-Äquivalent
Gleiche Semantik wie for(seed; hasNext; next).
Kein Risiko eines unendlichen Streams
Das Prädikat garantiert die Terminierung.
Alter Ansatz
iterate + limit
Moderner Ansatz
iterate(seed, pred, op)
Seit JDK
9
Schwierigkeitsgrad
Fortgeschritten
JDK-Unterstützung
Stream.iterate() mit Prädikat
Verfügbar
Weitgehend verfügbar seit JDK 9 (Sept. 2017)
Wie es funktioniert
Das dreiargumented Stream.iterate(seed, hasNext, next) funktioniert wie eine for-Schleife: seed ist der Startwert, hasNext bestimmt den Abbruch und next erzeugt den nächsten Wert.
Zugehörige Dokumentation