"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como converter com eficiência a lista de objetos em opcionais em Java Streams?

Como converter com eficiência a lista de objetos em opcionais em Java Streams?

Publicado em 2024-11-07
Navegar:649

How to Efficiently Convert List of Objects to Optional in Java Streams?

Tornando-se conciso com Java 8 opcional e Stream::flatMap

Ao trabalhar com fluxos Java 8, transformando um List em opcional e extrair o primeiro valor Other de forma eficiente pode ser um desafio. Embora flatMap normalmente exija um fluxo de retorno, a ausência de stream() para Opcional complica as coisas.

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();
Declaração de lançamento Este artigo foi reimpresso em: 1729667949 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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