Maison > Java > javaDidacticiel > Quelle approche Java facultative est la meilleure pour mapper des objets à des objets facultatifs et récupérer le premier résultat non vide via Stream :: flatMap ?

Quelle approche Java facultative est la meilleure pour mapper des objets à des objets facultatifs et récupérer le premier résultat non vide via Stream :: flatMap ?

Patricia Arquette
Libérer: 2024-10-24 03:03:28
original
370 Les gens l'ont consulté

Which Java Optionals Approach Is Best for Mapping Objects to Optional Objects and Retrieving First Non-Empty Result Via Stream::flatMap?

Intégration facultative de Java avec Stream::flatMap

Les développeurs Java recherchent un moyen concis de mapper une liste d'objets à des objets facultatifs et de récupérer les Le premier résultat non vide utilisant l'API Stream de Java 8 peut rencontrer un défi.

L'approche intuitive consistant à utiliser Things.stream().flatMap(this::resolve).findFirst() n'est pas réalisable car facultatif n'a pas de méthode stream(). Cela a conduit à l'exploration de solutions alternatives :

Java 16

Java 16 a introduit Stream.mapMulti, permettant la solution concise suivante :

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

Java 9

Java 9 a introduit Option.stream, permettant cette solution plus simple :

<code class="java">Optional<Other> result =
  things.stream()
        .map(this::resolve)
        .flatMap(Optional::stream)
        .findFirst();</code>
Copier après la connexion

Java 8

En Java 8, l'approche suivante utilisant une méthode d'assistance peut être utilisée :

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

// Helper method that converts Optional<T> to Stream<T>
private static <T> Stream<T> streamOptional(Optional<T> optional) {
  return optional.isPresent() ? Stream.of(optional.get()) : Stream.empty();
}</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!

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