Fornecendo condição de limite na geração de fluxo [duplicado]
Esta pergunta já tem uma resposta aqui:
Limitar um fluxo por um predicado 18 respostasEstou escrevendo um código para calcular números de Fibonacci. Com esse código, posso gerar os primeiros n números da sequência de Fibonacci.
Stream.generate(new Supplier<Long>() {
private long n1 = 1;
private long n2 = 2;
@Override
public Long get() {
long fibonacci = n1;
long n3 = n2 + n1;
n1 = n2;
n2 = n3;
return fibonacci;
}
}).limit(50).forEach(System.out::println);
O métodolimit
retorna oStream
que mantém o número de elementos passados para esse método. Eu quero parar a geração doStream
depois que o número de Fibonacci atingiu algum valor.
Quero dizer, se eu quiser listar todos os números de Fibonacci menores que 1000, não posso usarlimit
, porque não sei quantos números de Fibonacci poderiam existir.
Existe alguma maneira de fazer isso usando expressões lambda?