Collections Intermediário

Compute duas agregações em uma única passagem pelo stream.

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

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
Collectors.teeing()
Disponível

Amplamente disponível desde o JDK 12 (março de 2019)

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.

Compartilhar 𝕏 🦋 in