Maison >Java >javaDidacticiel >Comment convertir facultatif en flux dans Java 8 ?

Comment convertir facultatif en flux dans Java 8 ?

DDD
DDDoriginal
2024-10-24 01:10:02680parcourir

How to Convert Optional to Stream in Java 8?

Conversion facultative en Stream à l'aide de flatMap() de Java 8

L'API Stream de Java offre des solutions de codage concises, mais certains scénarios peuvent poser des défis. Une telle situation implique la conversion d'un fichier facultatif à un Stream en utilisant flatMap().

Le problème

Étant donné une liste de choses (List Things) et une méthode (Facultatif solve(Thing thing)), le but est de mappez les éléments sur Facultatif et récupérez le premier Autre. La solution conventionnelle serait :

things.stream().flatMap(this::resolve).findFirst();

Cependant, flatMap() attend un flux comme valeur de retour, tandis que Optionnel ne fournit pas de méthode stream().

Solution Java 16

Java 16 introduit Stream.mapMulti(), résolvant ce problème :

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

Solution Java 9

Java 9 introduitOptional.stream(), permettant la conversion directe :

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

Solution Java 8

Malheureusement, Java 8 ne dispose pas d'une méthode simple pour convertir Facultatif en Stream. Cependant, une fonction d'assistance peut être utilisée :

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();

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