Sobes.tech
Junior — Middle

¿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.