Implementación de Flujos de Stream en Java

En Java, las colecciones de un solo elemento y los arreglos admiten la invocación directa del método stream(). Sin embargo, para colecciones como mapas, que contienen pares clave-valor, se requiere una conversión previa a una vista de un solo elemento, como mediante keySet() o entrySet(), antes de generar un flujo.

Métodos intermedios de Stream

Estos métodos producen un nuevo flujo Stream, y el flujo original debe usarse una sola vez; se recomienda el estilo de encadenamiento. Cualquier modificación en los datos del flujo no afecta a la colección o arreglo subyacente.

  • filtrar: Permite seleccionar elementos basándose en una condición.
  • limitar: Obtiene una cantidad específica de los primeros elementos.
  • omitir: Salta una cantidad determinada de elementos iniciales.
  • distintos: Elimina duplicados, dependiendo de hashCode e equals.
  • concatenar: Combina dos flujos en uno solo.
  • mapear: Transforma cada elemento aplicando una función.

Ejemplo de uso de mapeo:

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

List<String> datosPersonales = new ArrayList<>();
Collections.addAll(datosPersonales, "Ana-25", "Carlos-30", "Elena-22");

// Uso de expresión lambda para mapear y extraer edades
datosPersonales.stream()
    .map(texto -> Integer.valueOf(texto.split("-")[1]))
    .forEach(edad -> System.out.println("Edad: " + edad));

Métodos terminales de Stream

Estos métodos consumen el flujo y realizan una operación final, devolviendo un resultado o un efecto secundario.

  • forEach: Itera sobre cada elemento del flujo.
  • cuenta: Devuelve el número total de elementos.
  • aArreglo: Recopila los elementos en un arreglo.
  • colectar: Agrupa los elementos en una colección o estructura personalizada.

Ejemplo de conversión a arreglo:

String[] arregloResultante = datosPersonales.stream()
    .toArray(longitud -> new String[longitud]);

Ejemplo de coleccionamiento con filtrado y mapeo a un mapa:

import java.util.stream.Collectors;

List<String> registros = new ArrayList<>();
Collections.addAll(registros, "Pedro-M-40", "Lucia-F-35", "Miguel-M-28");

Map<String, Integer> mapaEdadesMasculinas = registros.stream()
    .filter(entrada -> entrada.split("-")[1].equals("M"))
    .collect(Collectors.toMap(
        elemento -> elemento.split("-")[0],
        elemento -> Integer.valueOf(elemento.split("-")[2])
    ));

System.out.println("Mapa de edades: " + mapaEdadesMasculinas);

Etiquetas: java Stream API programación funcional colecciones de Java operaciones con flujos

Publicado el 6-17 03:01