Java Array to Stream y sus opciones

Java Array to Stream ,es una de las operaciones más habituales que nos pueden tocar en el día a día cuando abordamos nuevas capacidades de Java 8 como es el manejo de Streams con código mucho más legacy que puede contener elementos que son simples Arrays de un tipo concreto . ¿Cómo podemos aunar ambas cosas? . La realidad es que la transformación es muy muy sencilla . Vamos a partir de un ejemplo que recorre un array de cadenas.

package com.arquitecturajava;

public class Principal {

 public static void main(String[] args) {
  
  String [] nombres= new String[] { "pedro", "angel", "oscar","ana","maria"};
  
  for (String nombre:nombres) {
   System.out.println(nombre);
  }
  
 }

}

Si lo ejecutamos nos mostrará en la pantalla la lista de nombres:

Java Array to Stream

Convertirlo a un Stream y recorrerlos es prácticamente trivial ya que la clase Arrays soporta el método stream que convierte un Array en un Stream de datos y no hay que darle muchas vueltas más:

 package com.arquitecturajava;

import java.util.Arrays;

public class Principal {

 public static void main(String[] args) {
  
  
  String [] nombres= new String[] { "pedro", "angel", "oscar","ana","maria"};
  
  Arrays.stream(nombres).forEach(System.out::println);

 }

}

Todo mucho más sencillo y nos permite realizar la conversión de forma prácticamente directa con la simplificación de código que supone al usar un método de referencia el resultado es idéntico:

La ventaja de utilizar un stream es que diseñamos un flujo de trabajo y podemos añadir operaciones intermedias como puede ser filter:

package com.arquitecturajava;

import java.util.Arrays;

public class Principal {

 public static void main(String[] args) {
  
  
  String [] nombres= new String[] { "pedro", "angel", "oscar","ana","maria"};
  
  Arrays.stream(nombres).filter(n->n.length()<4).forEach(System.out::println);
  
  

 }

}

El resultado únicamente imprimirá ana por la consola:

Java Arrays VarArgs y Streams

Otra situación en la que es muy habitual usar Arrays y combinarlos con Streams es cuando usamos métodos que soportan un número variable de argumentos

package com.arquitecturajava;

import java.util.Arrays;

public class Principal4 {

 public static void main(String[] args) {
  imprimir ("pedro","oscar","david");
  imprimir ("gema","ana","maria");
 }
 
 public static void imprimir (String ... nombres) {
  Arrays.stream(nombres).forEach(System.out::println);
 }

}

El resultado incluye ambas listas:

Otros artículos relacionados