web-dev-qa-db-fra.com

Comment convertir un <T> facultatif en un flux <T>?

Je veux ajouter un flux à une option. Puisque Stream.concat ne peut concaténer que des flux, j'ai cette question:

Comment convertir un <T> facultatif en un flux <T>?

Exemple:

Optional<String> optional = Optional.of("Hello");
Stream<String> texts = optional.stream(); // not working
46
slartidan

Dans Java-9, la méthode stream() manquante est ajoutée. Ce code fonctionne donc:

Stream<String> texts = optional.stream();

Voir JDK-8050820 . Téléchargez Java-9 ici .

56
Tagir Valeev

En Java 8, vous pouvez faire ceci:

Stream<String> texts = optional.map(Stream::of).orElseGet(Stream::empty);
106
slartidan

Tu peux faire:

Stream<String> texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty();
6
Konstantin Yovkov

Je peux recommander la méthode Streams.stream(optional) de Guava si vous n'êtes pas sous Java 9. Un exemple simple:

Streams.stream(Optional.of("Hello"))

Également possible d'importer Streams.stream statique, vous pouvez donc écrire

stream(Optional.of("Hello"))
4
Utku Özdemir

Si vous utilisez une ancienne version de Java (Android, vous regardez) et utilisez l’API aNNiMON Lightweight Stream , vous pouvez effectuer les opérations suivantes:

    final List<String> flintstones = new ArrayList<String>(){{
        add("Fred");
        add("Wilma");
        add("Pebbles");
    }};

    final List<String> another = Optional.ofNullable(flintstones)
            .map(Stream::of)
            .orElseGet(Stream::empty)
            .toList();

Cet exemple ne fait qu'une copie de la liste.

1
JohnnyLambada

Streamify est une belle bibliothèque d'un de mes ex-collègues. Un grand nombre de collectionneurs, créant des flux de pratiquement tout.

https://github.com/sourcy/streamify

Créer un flux forme optionnel dans streamify:

Streamify.stream(optional)
0
Gábor Lipták