Heim > Java > javaLernprogramm > Hauptteil

So reduzieren Sie optionale Elemente in einen Stream in Java

Barbara Streisand
Freigeben: 2024-10-24 04:16:30
Original
320 Leute haben es durchsucht

How to Flatten Optionals into a Stream in Java

Optionale Verwendung von Java 8 mit Stream::flatMap

Stream::flatMap ist ein leistungsstarkes Tool in Java 8 zum Kombinieren mehrerer Streams zu einem einzigen Stream. Es erfordert jedoch die Rückgabe eines Streams, was beim Umgang mit Optionals problematisch sein kann.

Problem

Stellen Sie sich eine Situation vor, in der wir eine Liste haben. und eine Methode, die jedes Ding einem optionalen zuordnet. Wir möchten die Dinge auf Optionals abbilden und dann das erste nicht leere Optional abrufen.

Ein naiver Ansatz mit Stream::flatMap und Optional::findFirst würde fehlschlagen, da Optionals keinen stream() bereitstellen Methode:

<code class="java">things.stream().flatMap(this::resolve).findFirst(); // Error!</code>
Nach dem Login kopieren

Lösung

Java 16 und höher

Java 16 führte Stream.mapMulti ein, das die Zuordnung eines Optionals zu einem Stream von ermöglicht seine nicht leeren Elemente:

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

Java 9

Java 9 hat Optional.stream hinzugefügt, das direkt einen Stream des nicht leeren optionalen Werts zurückgibt:

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

Java 8

Für Java 8 können wir eine Hilfsfunktion verwenden, um ein Optional in einen Stream umzuwandeln:

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

Using Mit dieser Hilfsfunktion lautet die Lösung:

<code class="java">Optional<Other> result =
    things.stream()
          .flatMap(t -> streamopt(resolve(t)))
          .findFirst();</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo reduzieren Sie optionale Elemente in einen Stream in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage