Coletores não modificáveis
Colete diretamente para uma lista não modificável com stream.toList().
Comparação de Código
✕ Java 8
List<String> list = stream.collect(
Collectors.collectingAndThen(
Collectors.toList(),
Collections::unmodifiableList
)
);
✓ Java 16+
List<String> list = stream.toList();
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
O mais curto
stream.toList() não precisa de collect() nem de import de Collectors.
Imutável
O resultado não pode ser modificado — sem mutações acidentais.
Legível
Lê-se naturalmente como o passo final de qualquer pipeline de stream.
Abordagem Antiga
collectingAndThen
Abordagem Moderna
stream.toList()
Desde o JDK
16
Dificuldade
Intermediário
Suporte JDK
Coletores não modificáveis
Disponível
Amplamente disponível desde o JDK 16 (março de 2021)
Como funciona
O Java 10 adicionou toUnmodifiableList(), toUnmodifiableSet() e toUnmodifiableMap() para substituir o encapsulamento verboso com collectingAndThen. Para listas especificamente, o stream.toList() do Java 16 oferece uma alternativa ainda mais simples — sem chamada a collect(). Use toUnmodifiableSet() e toUnmodifiableMap() para outros tipos de coleção.
Documentação Relacionada