Tornando-se conciso com Java 8 opcional e Stream::flatMap
Ao trabalhar com fluxos Java 8, transformando um List
Java 16 Solution
Java 16 apresenta Stream.mapMulti, permitindo mais abordagem concisa:
Optional result = things.stream()
.map(this::resolve)
.mapMulti(Optional::ifPresent)
.findFirst();
Java 9 Solution
JDK 9 adiciona Optional.stream, simplificando a tarefa:
Optional result = things.stream()
.map(this::resolve)
.flatMap(Optional::stream)
.findFirst();
Solução Java 8
No Java 8, a seguinte abordagem pode ser adotada:
Optional result = things.stream()
.map(this::resolve)
.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
.findFirst();
Usando uma função auxiliar para converter Opcional em Stream:
static Stream streamopt(Optional opt) {
if (opt.isPresent())
return Stream.of(opt.get());
else
return Stream.empty();
}
Optional result = things.stream()
.flatMap(t -> streamopt(resolve(t)))
.findFirst();
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3