wake-up-neo.net

Wie konvertiere ich ein optionales <T> in einen Stream <T>?

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
46
slartidan

In Java-9 wird die fehlende stream()-Methode hinzugefügt.

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

Siehe JDK-8050820 . Laden Sie Java-9 hier herunter.

56
Tagir Valeev

In Java 8 können Sie Folgendes tun:

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

Du kannst tun:

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

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"))
4
Utku Özdemir

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.

1
JohnnyLambada

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)
0
Gábor Lipták