Maison  >  Article  >  Java  >  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
Patricia Arquetteoriginal
2024-10-24 03:03:28280parcourir

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>

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>

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>

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