Stream.mapMulti()
Emita zero ou mais elementos por entrada sem criar streams intermediários.
Comparação de Código
✕ Java 8
stream.flatMap(order ->
order.items().stream()
.map(item -> new OrderItem(
order.id(), item)
)
);
✓ Java 16+
stream.<OrderItem>mapMulti(
(order, downstream) -> {
for (var item : order.items())
downstream.accept(
new OrderItem(order.id(), item));
}
);
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Menos alocação
Nenhum Stream intermediário criado por elemento.
Estilo imperativo
Use loops e condicionais diretamente.
Flexível
Emita zero, um ou muitos elementos com controle total.
Abordagem Antiga
flatMap + List
Abordagem Moderna
mapMulti()
Desde o JDK
16
Dificuldade
Intermediário
Suporte JDK
Stream.mapMulti()
Disponível
Amplamente disponível desde o JDK 16 (março de 2021)
Como funciona
mapMulti() é uma alternativa imperativa ao flatMap que evita a criação de objetos Stream intermediários para cada elemento. É mais eficiente quando o mapeamento produz um número pequeno de elementos.
Documentação Relacionada