Collectors.teeing()
Compute duas agregações em uma única passagem pelo stream.
Comparação 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
)
);
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Passagem única
Processe o stream uma vez em vez de duas.
Componível
Combine quaisquer dois coletores com uma função de mesclagem.
Resultado imutável
Combine diretamente em um record ou objeto de valor.
Abordagem Antiga
Duas passagens
Abordagem Moderna
teeing()
Desde o JDK
12
Dificuldade
Intermediário
Suporte JDK
Collectors.teeing()
Disponível
Amplamente disponível desde o JDK 12 (março de 2019)
Como funciona
Collectors.teeing() envia cada elemento para dois coletores downstream e combina os resultados. Isso evita percorrer os dados duas vezes ou usar um acumulador mutável.
Documentação Relacionada