Comment convertir un facultatif en un stream ?

Je veux append un stream à une option. Puisque Stream.concat ne peut que concaténer Streams, j’ai cette question:

Comment convertir un facultatif en un stream ?

Exemple:

 Optional optional = Optional.of("Hello"); // or Optional optional = Optional.empty(); Stream texts = optional.stream(); // not working 

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

 Stream texts = optional.stream(); 

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

En Java 8, vous pouvez le faire:

 Stream texts = optional.map(Stream::of).orElseGet(Stream::empty); 

Tu peux faire:

 Stream texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty(); 

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

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

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

 stream(Optional.of("Hello")) 

Si vous utilisez une ancienne version de Java (regardez-vous, Android) et que vous utilisez l’ API aNNiMON Lightweight Stream , vous pouvez faire quelque chose comme:

  final List flintstones = new ArrayList(){{ add("Fred"); add("Wilma"); add("Pebbles"); }}; final List another = Optional.ofNullable(flintstones) .map(Stream::of) .orElseGet(Stream::empty) .toList(); 

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

Une belle bibliothèque de l’un de mes collègues est Streamify. Beaucoup de collectionneurs, créant des stream à partir de pratiquement tout.

https://github.com/sourcy/streamify

La création d’un stream constitue un élément facultatif dans streamify:

 Streamify.stream(optional)