Ich möchte einen Stream mit einem Optional voranstellen. Da Stream.concat
nur Streams verketten kann, habe ich folgende Frage:
Wie konvertiere ich ein optionales <T> in einen Stream <T>?
Beispiel:
Optional<String> optional = Optional.of("Hello");
Stream<String> texts = optional.stream(); // not working
In Java-9 wird die fehlende stream()
-Methode hinzugefügt.
Stream<String> texts = optional.stream();
Siehe JDK-8050820 . Laden Sie Java-9 hier herunter.
In Java 8 können Sie Folgendes tun:
Stream<String> texts = optional.map(Stream::of).orElseGet(Stream::empty);
Du kannst tun:
Stream<String> texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty();
Ich kann Guava s Streams.stream(optional)
Methode empfehlen, wenn Sie nicht auf Java 9 sind. Ein einfaches Beispiel:
Streams.stream(Optional.of("Hello"))
Statischer Import Streams.stream
ist auch möglich, sodass Sie nur schreiben können
stream(Optional.of("Hello"))
Wenn Sie eine ältere Version von Java verwenden (Sie, Android), und die aNNiMON Lightweight Stream-API verwenden, können Sie Folgendes tun:
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();
Dieses Beispiel erstellt lediglich eine Kopie der Liste.
Eine schöne Bibliothek von einem meiner ehemaligen Kollegen heißt Streamify. Viele Sammler, die aus praktisch allem Streams erstellen.
https://github.com/sourcy/streamify
Erstellen eines Stream-Formulars optional in Streamify:
Streamify.stream(optional)