¿Cómo se usa Stream.collect() en Java para manejar colecciones?

| Última modificación: 11 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Quienes trabajamos con colecciones en Java hemos deseado que exista una forma mucho más rápida de manejarlas. De hecho, muchas veces la tarea de gestionar y transformar datos se vuelve tediosa, pero con el método Stream.collect() en Java esto se acabó. A mí me ayudó muchísimo y quiero que tú también aprendas a usarlo. La clave es que entiendas cómo usar Stream.collect() para convertir Streams en listas, conjuntos, mapas o cualquier estructura que necesites.

Stream.collect() en Java qué es

¿Qué es Stream.collect() en Java?

Te contaba que Stream.collect() en Java es un método con el que podrás recopilar los elementos de un Stream y convertirlos en una estructura de datos o resultado final según las especificaciones que definas.

Lo que hace es darle mucha flexibilidad a la clase Collectors, que contiene métodos predefinidos para realizar operaciones comunes como agrupar, unir, reducir o sumar elementos.

  • Por ejemplo, imagina que tienes una lista de nombres y necesitas agruparlos en una nueva lista o concatenarlos en una sola cadena. Stream.collect() te facilitará mucho las cosas, hará el proceso más sencillo y eficiente.

¿Cómo funciona Stream.collect() en Java?

Lo grandioso es que @Stream.collect() en Java es realmente muy fácil de usar. Solo necesitas hacer lo siguiente:

  1. Crea un Stream: A partir de una colección existente o generándolo directamente.
  2. Aplica operaciones intermedias: Como filtrado o mapeo.
  3. Finaliza con collect(): Usando un colector de la clase Collectors.

Ten en cuenta que el método Stream.collect() utiliza los colectores para definir cómo se recopilan los datos. Voy a mostrarte unos buenos ejemplos que te ayudarán a entender más:

Ejemplos prácticos para aprender a usar Stream.collect() en Java

Convertir un Stream en una Lista

En este ejemplo haremos algo básico. Vas a convertir un Stream en Java en una lista. Entonces, vas a usar el colector Collectors.toList().

import java.util.*;
import java.util.stream.*;

public class Main {
public static void main(String[] args) {
List<String> nombres = Arrays.asList("Juan", "Ana", "Luis", "María");

List<String> listaFiltrada = nombres.stream()
.filter(nombre -> nombre.startsWith("M"))
.collect(Collectors.toList());

System.out.println(listaFiltrada); // [María]
}
}

Transformar un Stream en un Conjunto

Ahora voy a mostrarte qué debes hacer si necesitas evitar duplicados en tus datos, el colector Collectors.toSet() es ideal.

import java.util.*;
import java.util.stream.*;

public class Main {
public static void main(String[] args) {
List<Integer> numeros = Arrays.asList(1, 2, 3, 3, 4, 5, 5);

Set<Integer> conjunto = numeros.stream()
.filter(n -> n > 2)
.collect(Collectors.toSet());

System.out.println(conjunto); // [3, 4, 5]
}
}

Crear un Map con Collectors.toMap()

Quiero que veas que también puedes convertir un Stream en un mapa donde defines las claves y los valores.

import java.util.*;
import java.util.stream.*;

public class Main {
public static void main(String[] args) {
List<String> nombres = Arrays.asList("Juan", "Ana", "Luis", "María");

Map<String, Integer> mapa = nombres.stream()
.collect(Collectors.toMap(nombre -> nombre, nombre -> nombre.length()));

System.out.println(mapa); // {Juan=4, Ana=3, Luis=4, María=5}
}
}

Concatenar elementos con Collectors.joining()

Te muestro que, si necesitas unir los elementos de un Stream en una cadena, el colector Collectors.joining() es la solución.

import java.util.*;
import java.util.stream.*;

public class Main {
public static void main(String[] args) {
List<String> frutas = Arrays.asList("Manzana", "Banana", "Cereza");

String resultado = frutas.stream()
.collect(Collectors.joining(", "));

System.out.println(resultado); // Manzana, Banana, Cereza
}
}

Sumar valores con Collectors.summingInt()

En caso de que necesites sumar los valores de un Stream, puedes usar el colector Collectors.summingInt().

import java.util.*;
import java.util.stream.*;

public class Main {
public static void main(String[] args) {
List<Integer> numeros = Arrays.asList(10, 20, 30);

int suma = numeros.stream()
.collect(Collectors.summingInt(n -> n));

System.out.println(suma); // 60
}
}

Consejos a la hora de usar Stream.collect() en Java

  1. Elige el colector adecuado: Es aquí donde muchos se equivocan. Entonces, usa Collectors.toList() para listas, Collectors.toSet() para conjuntos y Collectors.toMap() para mapas. Recuerda que hay un colector para casi todo.
  2. Evita Streams reutilizados: No olvides por nada del mundo que los Streams en Java solo se pueden consumir una vez. Así que, si necesitas procesar los mismos datos de nuevo, tienes que crear otro Stream.
  3. Usa operaciones intermedias con sentido: Combina filter, map o sorted para preparar los datos antes de recopilarlos.
  4. Piensa en la concurrencia: Si trabajas en entornos multihilo, considera usar colectores concurrentes como Collectors.toConcurrentMap().

Anímate a probar Stream.collect() en Java. No te arrepentirás porque es una buena herramienta para trabajar con datos. No importa si necesitas transformar, agrupar o sumar valores, este método te ofrece soluciones rápidas y flexibles para manejar colecciones y más.

Aprender a programar con Java es realmente fascinante. De hecho, en el Bootcamp de Java Full Stack de KeepCoding, aprenderás desde lo básico hasta técnicas avanzadas, desarrollando habilidades que te abrirán las puertas al sector IT en tiempo récord. ¡No pierdas la oportunidad de transformar tu vida profesional! Apúntate ahora y lleva tu carrera al siguiente nivel.

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado