Stream.iterate() avec prédicat
Utilisez un prédicat pour arrêter l'itération — comme une boucle for sous forme de stream.
Comparaison de Code
✕ 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
Un problème avec ce code ? Dites-le nous.
Pourquoi la méthode moderne gagne
Terminaison naturelle
S'arrête selon une condition, pas une limite arbitraire.
Équivalent à for
Même sémantique que for(seed; hasNext; next).
Sans risque de stream infini
Le prédicat garantit la terminaison.
Ancienne Approche
iterate + limit
Approche Moderne
iterate(seed, pred, op)
Depuis JDK
9
Difficulté
Intermédiaire
Support JDK
Stream.iterate() avec prédicat
Disponible
Disponible depuis JDK 9 (sept. 2017)
Comment ça fonctionne
Stream.iterate(seed, hasNext, next) à trois arguments fonctionne comme une boucle for : seed est le début, hasNext détermine quand s'arrêter et next produit la valeur suivante.
Documentation Associée