Conversioni Java IntStream

1. Introduzione

In questo breve tutorial, esamineremo tutte le possibilità relative alle conversioni IntStream ad altri tipi .

Letture interessanti sulla boxe e l'unboxing o l'iterazione sono consigliate come complemento di questo tutorial.

2. Da IntStream a Array

Cominciamo esplorare come possiamo convertire da un IntStream oggetto ad un array di int s .

Per il bene di questo esempio, generiamo i primi 50 numeri pari e di conseguenza li memorizziamo in un array:

@Test public void intStreamToArray() { int[] first50EvenNumbers = IntStream.iterate(0, i -> i + 2) .limit(50) .toArray(); assertThat(first50EvenNumbers).hasSize(50); assertThat(first50EvenNumbers[2]).isEqualTo(4); }

Per prima cosa, creiamo un flusso infinito di numeri interi a partire da 0 e iterando aggiungendo 2 a ciascun elemento. Subito dopo, dobbiamo aggiungere un limite di operazioni intermedie per fare in modo che questa operazione, in qualche modo, termini.

Infine, usiamo l'operazione di terminazione collect per raccogliere questo flusso in un array.

Questo è un modo straight-forward di generare un array di int s .

3. IntStream in elenco

Convertiamo ora un IntStream in un elenco di numeri interi .

In questo caso, solo per aggiungere più varietà all'esempio, usiamo l' intervallo del metodo anziché l' iterazione del metodo . Questo metodo genererà un IntStream dal int 0 al int 50 (non incluso in quanto si tratta di un intervallo aperto):

@Test public void intStreamToList() { List first50IntegerNumbers = IntStream.range(0, 50) .boxed() .collect(Collectors.toList()); assertThat(first50IntegerNumbers).hasSize(50); assertThat(first50IntegerNumbers.get(2)).isEqualTo(2); }

In questo esempio, utilizziamo la gamma di metodi . La parte più nota qui sta usando il metodo boxed , che, come indica il nome, inscatolerà tutti gli elementi int nell'IntStream e restituirà un Stream .

Infine, possiamo usare un collector per ottenere un elenco di interi .

4. IntStream in stringa

Per il nostro ultimo argomento, esploriamo come è possibile ottenere una stringa da un IntStream .

In questo caso, genereremo solo i primi 3 int (0, 1 e 2):

@Test public void intStreamToString() { String first3numbers = IntStream.of(0, 1, 2) .mapToObj(String::valueOf) .collect(Collectors.joining(", ", "[", "]")); assertThat(first3numbers).isEqualTo("[0, 1, 2]"); }

Innanzitutto, in questo caso, costruiamo un IntStream con il costruttore IntStream.of () . Dopo aver creato lo Stream , dobbiamo in qualche modo generare un Stream da un IntStream . Quindi, possiamo usare il metodo intermedio mapToObj che prenderà un IntStream e restituirà un Stream del tipo dell'oggetto risultante mappato nel metodo chiamato.

Infine, utilizziamo l' unione del collector che accetta uno Stream e può aggiungere ogni elemento dello Stream utilizzando un delimitatore e, facoltativamente, un prefisso e un suffisso.

5. Conclusioni

In questo breve tutorial, abbiamo esplorato tutte le alternative quando dobbiamo convertire un IntStream in qualsiasi altro tipo. In particolare, abbiamo esaminato esempi come la generazione di un array, una lista e una stringa .

E, come sempre, il codice di esempio è disponibile su GitHub.