Maison  >  Article  >  Java  >  Comment convertir efficacement une liste d'objets en éléments facultatifs dans les flux Java ?

Comment convertir efficacement une liste d'objets en éléments facultatifs dans les flux Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 16:16:02254parcourir

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

Devenir concis avec les options et Stream::flatMap de Java 8

Lorsque vous travaillez avec des flux Java 8, la transformation d'une liste à Facultatif et extraire efficacement la première autre valeur peut être un défi. Alors que flatMap nécessite généralement un flux de retour, l'absence de stream() pour facultatif complique les choses.

Solution Java 16

Java 16 introduit Stream.mapMulti, permettant un plus approche concise :

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .<Other>mapMulti(Optional::ifPresent)
    .findFirst();</code>

Solution Java 9

JDK 9 ajouteOptional.stream, simplifiant la tâche :

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();</code>

Solution Java 8

Dans Java 8, l'approche suivante peut être adoptée :

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();</code>

Utilisation d'une fonction d'assistance pour convertir Facultatif en Stream :

<code class="java">static <T> Stream<T> streamopt(Optional<T> opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}

Optional<Other> result = things.stream()
    .flatMap(t -> streamopt(resolve(t)))
    .findFirst();</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn