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

Comment convertir facultatif en flux dans Java 8 ?

DDD
Libérer: 2024-10-24 01:10:02
original
679 Les gens l'ont consulté

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

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

Solution Java 9

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

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

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();
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal