Java IntStream iterate vs generate quando usare cosa?


19

Sembra che IntStream.iteratesia solo una versione ordinata leggera per IntStream.generate. È vero? In caso contrario, qual è la differenza principale?

Risposte:


21

Nota come le loro firme sono diverse:

  • generateprende a IntSupplier, il che significa che dovresti generare ints senza che ti venga dato nulla. Esempi di utilizzo includono la creazione di un flusso costante dello stesso numero intero, la creazione di un flusso di numeri interi casuali. Notare come ogni elemento nel flusso non dipende dall'elemento precedente.

  • iterateprende a seede a IntUnaryOperator, il che significa che dovresti generare ogni elemento in base all'elemento precedente . Questo è utile per creare una sequenza definita induttivamente, per esempio. In questo caso, ogni elemento dovrebbe dipendere da quello precedente .


Quindi usa il caso di iterazione - quando è necessario salvare lo stato - questa è la differenza principale. Generare la necessità di memorizzare lo stato altrove. E Iterate è ordinato, mentre generate non è ordinata, il che è praticabile per il parallelismo
JJ Beam

8
  1. IntStream.iteraterestituisce un ordineIntStream invece IntStream.generaterestituisce un non ordinatoIntStream che può aiutare ad accelerare le condotte di flusso parallelo.

  2. IntStream.generate sono preferiti per generare valori casuali o costanti come specificato in Javadoc, immagino molto probabilmente per le caratteristiche del flusso restituito.


5

A parte l'ordine, anche l'uso è un po 'diverso. Diamo un'occhiata alle firme del metodo:

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

Iterate ha esplicitamente dato il valore iniziale come parametro e operatore unario che viene utilizzato per generare il valore successivo dal precedente. Qui l'operatore può essere facilmente immutabile senza stato interno e può essere riutilizzato in più punti in parallelo senza alcun problema.

Generare utilizza fornitore. Questi possono fornire numeri costanti o casuali o devono avere uno stato interno per fornire serie come (1, 2, 3, ...).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.