Stream.iterate() con predicato
Usa un predicato per fermare l'iterazione — come un ciclo for in forma stream.
Confronto Codice
✕ 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
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Terminazione naturale
Fermati in base a una condizione, non a un limite arbitrario.
Equivalente al ciclo for
Stessa semantica di for(seed; hasNext; next).
Nessun rischio di stream infinito
Il predicato garantisce la terminazione.
Approccio Vecchio
iterate + limit
Approccio Moderno
iterate(seed, pred, op)
Dal JDK
9
Difficoltà
Intermedio
Supporto JDK
Stream.iterate() con predicato
Disponibile
Ampiamente disponibile dal JDK 9 (settembre 2017)
Come funziona
Il tre-argomenti Stream.iterate(seed, hasNext, next) funziona come un ciclo for: seed è l'inizio, hasNext determina quando fermarsi e next produce il valore successivo.
Documentazione Correlata