Eu tenho uma Map
com Optional
valores.
Quero filtrá-lo para remover valores vazios.
Map<K, Optional<T>> input;
Map<K, T> result = input.
// here is some code I'm looking for
.collect(Collector.toMap(???));
Qual é a maneira mais fácil de conseguir isso?
Tudo o que consigo pensar é que requer Optional.get
e não gosto que o IDE me avise sobre isso.
A maneira mais fácil de fazer isso, especialmente evitando
Optional.get()
, não envolverá fluxos de forma alguma; mais como(Em geral, se não houver uma maneira realmente óbvia de fazer algo com fluxos, geralmente será mais simples e limpo não usar fluxos.)
Se você insiste em usar um
Collector
, é possível, mas requer um cuidadosamente personalizado, especialmente se você não tolerarOptional.get()
.Se você puder tolerar
Optional.get()
, você pode considerar mais simples escreverUma maneira é usando
Stream.mapMulti
(disponível desde Java 16):Isso permite uma abordagem imperativa.
Aqui está uma maneira mais funcional que faz exatamente a mesma coisa:
O código acima usa
Optional.ifPresent
.Outra maneira é usando
Collectors.filtering
:(Observação: meu IntelliJ produz um aviso em
Optional.get()
, mas esse aviso está errado).