Collectors.teeing()
Calcula dos agregaciones en una sola pasada del stream.
Comparación de Código
✕ Java 8
long count = items.stream().count();
double sum = items.stream()
.mapToDouble(Item::price)
.sum();
var result = new Stats(count, sum);
✓ Java 12+
var result = items.stream().collect(
Collectors.teeing(
Collectors.counting(),
Collectors.summingDouble(Item::price),
Stats::new
)
);
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Una sola pasada
Procesa el stream una vez en lugar de dos.
Componible
Combina dos collectors cualesquiera con una función de fusión.
Resultado inmutable
Fusiona directamente en un record u objeto de valor.
Enfoque Antiguo
Dos pasadas
Enfoque Moderno
teeing()
Desde JDK
12
Dificultad
Intermedio
Soporte JDK
Collectors.teeing()
Disponible
Ampliamente disponible desde JDK 12 (marzo 2019)
Cómo funciona
Collectors.teeing() envía cada elemento a dos collectors downstream y combina los resultados. Esto evita recorrer los datos dos veces o usar un acumulador mutable.
Documentación Relacionada