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
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 .
En Java 8, vous pouvez faire ceci:
Stream<String> texts = optional.map(Stream::of).orElseGet(Stream::empty);
Tu peux faire:
Stream<String> texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty();
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"))
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.
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)