Heim >Java >javaLernprogramm >Wie konvertiert man Objektlisten in Java-Streams effizient in optionale Objekte?

Wie konvertiert man Objektlisten in Java-Streams effizient in optionale Objekte?

Barbara Streisand
Barbara StreisandOriginal
2024-10-23 16:16:02377Durchsuche

How to Efficiently Convert List of Objects to Optional in Java Streams?

Präzise werden mit Java 8's Optional und Stream::flatMap

Beim Arbeiten mit Java 8-Streams ist das Transformieren eines List zu Optional und das effiziente Extrahieren des ersten Other-Werts kann eine Herausforderung sein. Während flatMap normalerweise einen Return-Stream erfordert, wird die Sache durch das Fehlen von stream() für Optional komplizierter.

Java 16-Lösung

Java 16 führt Stream.mapMulti ein und ermöglicht so mehr prägnanter Ansatz:

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .<Other>mapMulti(Optional::ifPresent)
    .findFirst();</code>

Java 9-Lösung

JDK 9 fügt Optional.stream hinzu und vereinfacht die Aufgabe:

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();</code>

Java 8-Lösung

In Java 8 kann der folgende Ansatz gewählt werden:

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();</code>

Verwenden einer Hilfsfunktion zum Konvertieren von Optional in Stream:

<code class="java">static <T> Stream<T> streamopt(Optional<T> opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}

Optional<Other> result = things.stream()
    .flatMap(t -> streamopt(resolve(t)))
    .findFirst();</code>

Das obige ist der detaillierte Inhalt vonWie konvertiert man Objektlisten in Java-Streams effizient in optionale Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn