¿En qué se diferencian las operaciones terminales y no terminales en la API Stream en cuanto a sus funciones y propósito?
sobes.tech AI
Respuesta de la IA
En la API de Stream, las operaciones terminales y no terminales se diferencian en su propósito y comportamiento:
-
Operaciones no terminales (intermediate) — son operaciones que devuelven un nuevo stream y permiten construir una cadena de transformaciones. Son perezosas, es decir, no se ejecutan inmediatamente, sino solo cuando se llama a una operación terminal. Ejemplos:
filter(),map(),sorted(),distinct(). -
Operaciones terminales (terminal) — finalizan la cadena de operaciones y lanzan el procesamiento de datos. Devuelven un resultado (por ejemplo, una colección, un número, void). Después de una operación terminal, el stream se considera cerrado y no se puede usar nuevamente. Ejemplos:
collect(),forEach(),reduce(),count().
Ejemplo:
List<String> result = list.stream()
.filter(s -> s.startsWith("A")) // no terminal
.map(String::toUpperCase) // no terminal
.collect(Collectors.toList()); // terminal
Aquí, la filtración y transformación no se realizan de inmediato, sino solo cuando se llama a collect(), que inicia el procesamiento y devuelve la lista final.