Stream.iterate() com predicado
Use um predicado para encerrar a iteração — como um for-loop em forma de stream.
Comparação de Código
✕ 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
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Terminação natural
Pare com base em uma condição, não em um limite arbitrário.
Equivalente ao for-loop
Mesma semântica que for(seed; hasNext; next).
Sem risco de stream infinito
O predicado garante a terminação.
Abordagem Antiga
iterate + limit
Abordagem Moderna
iterate(seed, pred, op)
Desde o JDK
9
Dificuldade
Intermediário
Suporte JDK
Stream.iterate() com predicado
Disponível
Amplamente disponível desde o JDK 9 (setembro de 2017)
Como funciona
O Stream.iterate(seed, hasNext, next) com três argumentos funciona como um for-loop: seed é o início, hasNext determina quando parar e next produz o próximo valor.
Documentação Relacionada