Parece que IntStream.iterate
é apenas uma versão leve encomendada para IntStream.generate
. É verdade? Caso contrário, qual é a principal diferença?
java
java-8
java-stream
JJ Beam
fonte
fonte
IntStream.iterate
retorna uma ordem,IntStream
por outro lado,IntStream.generate
retorna uma ordem não ordenadaIntStream
que pode ajudar a acelerar os pipelines de fluxo paralelo.IntStream.generate
são preferidos para gerar valores aleatórios ou constantes, conforme especificado no Javadoc, acho que provavelmente pelas características do fluxo retornado.fonte
Além da ordem, também o uso é um pouco diferente. Vejamos as assinaturas do método:
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
A iteração forneceu explicitamente o valor inicial como parâmetro e operador unário, que é usado para gerar o próximo valor do anterior. Aqui, o operador pode ser facilmente imutável sem estado interno e pode ser reutilizado em vários locais em paralelo sem nenhum problema.
Gerar usa fornecedor. Esses podem fornecer números constantes ou aleatórios ou precisam ter um estado interno para fornecer séries como (1, 2, 3, ...).
fonte