Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 2 de 214/14 en el curso~15 min
Lecciones del módulo (2/2)

Stream API

Las Stream API en Java permiten procesar colecciones de objetos de forma declarativa, aprovechando la programación funcional. Un Stream no almacena datos, sino que transporta los elementos de una fuente (como una lista o un arreglo) a través de una tubería (pipeline) de operaciones.

Una tubería de Stream se compone de tres partes:

  1. Una fuente (ej. list.stream())
  2. Cero o más operaciones intermedias (que devuelven un nuevo Stream, ej. filter, map)
  3. Una operación terminal (que produce un resultado final o un efecto secundario y cierra el Stream, ej. collect, forEach, reduce)

Operaciones Intermedias Comunes

Las operaciones intermedias son "perezosas" (lazy): no se ejecutan hasta que se invoca una operación terminal.

  • filter(Predicate): filtra los elementos basándose en una condición booleana.
  • map(Function): transforma cada elemento en otro objeto aplicando una función.
  • sorted(): ordena los elementos del Stream.
Code
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

Operaciones Terminales Comunes

  • forEach(Consumer): realiza una acción para cada elemento del Stream.
  • collect(Collector): recoge los resultados del Stream en un contenedor (ej. una lista mediante Collectors.toList()).
  • reduce(identity, BinaryOperator): combina los elementos del Stream en un único valor acumulativo.
Code
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Somma tutti i numeri: 10

Pruébalo tú

Ejercicio#java.m7.l2.e1
Intentos: 0Cargando...

Completa el código utilizando el Stream de recursos para filtrar solo los números pares, recogerlos en una nueva List llamada evens e imprimirla mediante System.out.println.

Cargando editor...
Mostrar pista

Comienza llamando a `numbers.stream()`, añade `.filter(n -> n % 2 == 0)` y finalmente acumula con `.collect(Collectors.toList())`.

Solución disponible después de 3 intentos

Ejercicio#java.m7.l2.e2
Intentos: 0Cargando...

Usa los Streams para transformar todos los nombres de la lista names a mayúsculas usando map, e imprímelos en pantalla uno a uno usando forEach con System.lineSeparator o una referencia a método.

Cargando editor...
Mostrar pista

Usa `.map(s -> s.toUpperCase())` seguido de la operación terminal `.forEach(System.out::println)`.

Solución disponible después de 3 intentos

Ejercicio#java.m7.l2.e3
Intentos: 0Cargando...

Completa el código calculando la suma de todos los números presentes en la lista numbers utilizando un Stream y la operación terminal reduce con valor inicial 0. Imprime el resultado.

Cargando editor...
Mostrar pista

Usa `numbers.stream().reduce(0, (a, b) -> a + b)` e imprime la variable que contiene el resultado.

Solución disponible después de 3 intentos