Maison > Java > javaDidacticiel > 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
Libérer: 2024-10-23 16:16:02
original
340 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal