"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-07
Parcourir:631

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

Devenir concis avec Java 8's Facultatif et Stream::flatMap

Lorsque vous travaillez avec des flux Java 8, transformer une Liste en Facultatif et extraire efficacement la première valeur Autre peut être un défi. Bien 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 :

Optional result = things.stream()
    .map(this::resolve)
    .mapMulti(Optional::ifPresent)
    .findFirst();

La solution Java 9

JDK 9 ajoute Facultatif.stream, simplifiant la tâche :

Optional result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();

Solution Java 8

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

Optional result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();

Utilisation d'une fonction d'assistance pour convertir Facultatif en 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();
Déclaration de sortie Cet article est réimprimé à l'adresse : 1729667949. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3