Conversiones Java IntStream

1. Introducción

En este tutorial rápido, veremos todas las posibilidades relacionadas con las conversiones de IntStream a otros tipos .

Se recomiendan lecturas interesantes sobre boxeo y unboxing o iteración como complemento de este tutorial.

2. IntStream a Array

Comencemos a explorar cómo podemos convertir de un objeto IntStream a una matriz de int s .

Por el bien de este ejemplo, vamos a generar los primeros 50 números pares y almacenarlos en una matriz como resultado:

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

Primero, creemos un flujo infinito de enteros comenzando en 0 e iterando agregando 2 a cada elemento. Inmediatamente después de eso, necesitamos agregar un límite de operación intermedio para que esta operación, de alguna manera, finalice.

Finalmente, usemos la operación de terminación recolectar para reunir este flujo en una matriz.

Esta es una forma sencilla de generar una matriz de int s .

3. IntStream a la lista

Convirtamos ahora un IntStream en una lista de enteros .

En este caso, solo para agregar más variedad al ejemplo, usemos el rango del método en lugar del método iterar . Este método generará un IntStream desde el int 0 al int 50 (no incluido ya que es un rango abierto):

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

En este ejemplo, utilizamos el método range . La parte más notoria aquí es usar el método boxed , que, como su nombre indica, encuadrará todos los elementos int en el IntStream y devolverá un Stream .

Finalmente, podemos usar un colector para obtener una lista de enteros .

4. IntStream a String

Para nuestro último tema, exploremos cómo podemos obtener un String de un IntStream .

En este caso, generaremos solo los primeros 3 int s (0, 1 y 2):

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

Primero, en este caso, construimos un IntStream con el constructor IntStream.of () . Después de tener el Stream , necesitamos de alguna manera generar un Stream a partir de un IntStream . Por lo tanto, podemos usar el método mapToObj intermedio que tomará un IntStream y devolverá un Stream del tipo del objeto resultante mapeado en el método llamado.

Finalmente, usamos la unión de recopiladores que toma un Stream y puede agregar cada elemento del Stream usando un delimitador y, opcionalmente, un prefijo y un sufijo.

5. Conclusiones

En este tutorial rápido, hemos explorado todas las alternativas cuando necesitamos convertir un IntStream a cualquier otro tipo. En particular, analizamos ejemplos como la generación de una matriz, una lista y una cadena .

Y, como siempre, el código de muestra está disponible en GitHub.