Stream.iterate() z predykatem
Używaj predykatu do zatrzymania iteracji — jak pętla for w formie strumienia.
Porównanie kodu
✕ 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
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Naturalne zakończenie
Zatrzymaj na podstawie warunku, nie arbitralnego limitu.
Odpowiednik pętli for
Te same semantyki co for(seed; hasNext; next).
Bez ryzyka nieskończonego strumienia
Predykat gwarantuje zakończenie.
Stare podejście
iterate + limit
Nowoczesne podejście
iterate(seed, pred, op)
Od JDK
9
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Stream.iterate() z predykatem
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
Trójargumentowy Stream.iterate(seed, hasNext, next) działa jak pętla for — seed to punkt startowy, hasNext określa kiedy zatrzymać, a next produkuje następną wartość.
Powiązana dokumentacja
Dowód