Hoy vamos a ver una manera muy interesante de operar con colecciones de datos.
¿Querés saber que son los Streams de Java? Descubrámoslo juntos.

 

En este artículo vamos a tratar básicamente qué son los streams y qué nos permiten hacer. Además veremos un pequeño ejemplo de la diferencia que hay entre una operación con un loop normal y una hecha utilizando Streams

¿QUÉ SON LOS STREAMS?

Podríamos decir que los Streams son "envoltorios" de colecciones de datos que nos permiten operar con estas colecciones y hacer que el procesamiento masivo de datos sea rápido y fácil de leer. Algo importante a tener en cuenta es que los Streams no almacenan datos y no son una estructura de datos en sí. Tampoco modifican la fuente de datos subyacente. Solo realizan operaciones simples o concatenadas sobre ellos.


¿QUÉ NOS PERMITEN HACER?

Generalmente cuando trabajamos con colecciones filtramos, calculamos y realizamos muchos tipos de operaciones sobre los datos. Los Streams nos permiten a través del paradigma funcional abstraernos del cómo programar esas operaciones y sólo centrarnos en que resultado se espera y escribirlo de una manera muy declarativa.

 

VEAMOS UN EJEMPLO

Teniendo una lista con N cantidad de números, vamos a realizar una operación para quedarnos sólo con los números que sean menores a X valor.

 

Ejemplo con un ciclo For:
List<Long> listitaFor = new LinkedList();

for (int i = 0; i < lista.size(); i++) {
   Long valorActual = lista.get(i);
   if (valorActual < valorMaximo){
      listitaFor.add(valorActual);
   }
}

En este caso, el for itera la lista y tenemos que aclararle que, valor por valor, los compare con el valor máximo y que en el caso de que sea menor lo agregue a la lista de salida.

 
Ejemplo con Streams:
List<Long> listitaStream = lista.stream().filter(valor -> valor < valorMaximo)         
                                .collect(Collectors.toList());

En este caso, a una lista le asignamos el return de un Stream al cual sólo le aclaramos que tiene que realizar un filtro a través de una función lambda y que lo tiene que recolectar en una lista.

 

 

OPERACIONES

Hay muchas operaciones útiles que se pueden realizar con Streams.
Estas se dividen en:

  • Operaciones intermedias: Son operaciones las cuales retornan otro Stream (Stream <T>) y permite concatenar las diferentes operaciones.
  • Operaciones de terminal: devuelven un resultado de tipo definido.

 

CONCLUSIONES

A modo de conclusión, podemos decir que los Streams facilitan mucho trabajar con grandes cantidades de datos de forma muy prolija a la hora de escribirlo en el código. Más allá de eso, también tiene beneficios y contras en cuanto a rendimiento y eso es algo que estaremos tratando en algún próximo post. 

Eso es todo hasta acá. ¡Muchas gracias por leer! 

 

 

En el próximo post de Streams, vamos a estar viendo cuales son estas funciones intermedias y estas funciones terminales con ejemplos específicos de cada una.

 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!