Collectors.teeing()
Calcola due aggregazioni in un unico passaggio dello stream.
Confronto Codice
✕ 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
)
);
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Passaggio singolo
Elabora lo stream una volta invece di due.
Componibile
Combina qualsiasi due collector con una funzione di unione.
Risultato immutabile
Unisci direttamente in un record o value object.
Approccio Vecchio
Due passaggi
Approccio Moderno
teeing()
Dal JDK
12
Difficoltà
Intermedio
Supporto JDK
Collectors.teeing()
Disponibile
Ampiamente disponibile dal JDK 12 (marzo 2019)
Come funziona
Collectors.teeing() invia ogni elemento a due collector downstream e unisce i risultati. Evita di scorrere i dati due volte o di usare un accumulatore mutabile.
Documentazione Correlata