Streams Fortgeschritten

Ein Prädikat zum Beenden der Iteration verwenden – wie eine for-Schleife als Stream.

✕ 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.
🎯

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
Stream.iterate() mit Prädikat
Verfügbar

Weitgehend verfügbar seit JDK 9 (Sept. 2017)

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.

Teilen 𝕏 🦋 in