Gruki Logo

Gruki - Documentación de Programación

Java

Streams en Java: Un Río de Datos para Niños (y Adultos)

Aprende cómo usar Streams en Java de forma sencilla y con ejemplos fáciles de entender. Descubre cómo procesar colecciones de datos de manera eficiente y funcional.

Imagina que tienes una caja llena de juguetes. Quieres encontrar todos los juguetes rojos. Un Stream en Java es como un río que lleva cada juguete de la caja uno por uno para que los puedas ver.

En lugar de buscar los juguetes tú mismo, le dices al río (el Stream) qué quieres: 'Quiero todos los juguetes rojos'. El río te los mostrará uno a uno.

Los Streams hacen que procesar colecciones de datos (como la caja de juguetes) sea más fácil y rápido.

Operaciones Funcionales: Dando Órdenes al Río

Para decirle al río qué hacer, usas 'operaciones funcionales'. Son como órdenes que le das al río para que procese los juguetes (los datos).

Por ejemplo, puedes decirle: 'Filtra solo los juguetes rojos' (esto es una operación de 'filter'). O puedes decirle: 'Pinta todos los juguetes de azul' (esto sería una operación de 'map').

Hay muchas operaciones funcionales diferentes, cada una con su propia tarea. ¡Es como tener un control remoto para el río!

Puntos importantes:

  • Una operación muy útil es 'forEach'. Le dices al río que haga algo con cada juguete que pasa. Por ejemplo: 'Muestra cada juguete en la pantalla'.
  • Otra operación importante es 'collect'. Le dices al río que recoja todos los juguetes rojos en una nueva caja. ¡Así tienes una nueva colección con solo los juguetes que querías!

Ejemplos Prácticos con la Caja de Juguetes

Supongamos que tenemos una lista de juguetes:

"Coche rojo", "Muñeca azul", "Pelota roja", "Oso verde", "Coche azul"

Podemos usar Streams para encontrar todos los juguetes rojos:

listaDeJuguetes.stream().filter(juguete -> juguete.contains("rojo")).forEach(juguete -> System.out.println(juguete));

Este código le dice al río (el Stream) que filtre los juguetes que contienen la palabra "rojo" y luego que muestre cada uno de esos juguetes en la pantalla.

Puntos importantes:

  • La parte 'juguete -> juguete.contains("rojo")' se llama 'lambda expression'. Es como una pequeña función que le dices al río cómo debe filtrar los juguetes.
  • Los Streams no modifican la lista original de juguetes. Crean una nueva 'corriente' de datos basada en la lista original.

Ejemplos de Código

Ejemplo de Stream en Java que filtra una lista de números pares.

Lenguaje: Java

Explicación del código:

  1. Línea 1: import java.util.Arrays;: Importa la clase Arrays para convertir un array en una lista.
  2. Línea 2: import java.util.List;: Importa la interfaz List para trabajar con listas.
  3. Línea 3: import java.util.stream.Collectors;: Importa la clase Collectors para recolectar los elementos del Stream en una lista.
  4. Línea 4: public class StreamEjemplo {: Define una clase llamada StreamEjemplo.
  5. Línea 5: public static void main(String[] args) {: Define el método principal que ejecuta el programa.
  6. Línea 6: List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);: Crea una lista de números enteros del 1 al 10.
  7. Línea 7: List<Integer> numerosPares = numeros.stream(): Crea un Stream a partir de la lista 'numeros'. Imagina que estás poniendo los números en un río.
  8. Línea 8: .filter(numero -> numero % 2 == 0): Filtra el Stream, dejando solo los números pares. 'numero -> numero % 2 == 0' es una forma corta de decir 'si el número dividido por 2 da 0, entonces es par'. Es como decirle al río: 'Solo deja pasar los números pares'.
  9. Línea 9: .collect(Collectors.toList());: Recolecta todos los números pares que quedaron en el Stream y los guarda en una nueva lista llamada 'numerosPares'. Es como juntar todos los juguetes rojos en una caja nueva.
  10. Línea 10: System.out.println("Números pares: " + numerosPares);: Imprime la lista de números pares en la consola. Es como mostrar la nueva caja de juguetes rojos.

Recursos relacionados

Explora más contenido relacionado con Uso de Streams y operaciones funcionales. para profundizar tus conocimientos.