Heim > Java > javaLernprogramm > Wie kann man optionale Werte mit Stream::flatMap und Java Streams reduzieren?

Wie kann man optionale Werte mit Stream::flatMap und Java Streams reduzieren?

Patricia Arquette
Freigeben: 2024-10-23 16:35:02
Original
474 Leute haben es durchsucht

How to Flatten Optional Values with Stream::flatMap and Java Streams?

Flattening Optional Values ​​with Stream::flatMap and Java Streams

In Java 8 stellt das Stream-Framework leistungsstarke APIs für prägnanten Code bereit. Allerdings kann es schwierig sein, bestimmte Szenarios, insbesondere wenn es um Optionals geht, prägnant auszudrücken.

Problemstellung

Stellen Sie sich ein Szenario vor, in dem Sie eine Liste von Objekten und eine Methode haben, die löst jedes Objekt in ein Optional auf. Das Ziel besteht darin, die Objekte Optionals zuzuordnen und dann den ersten nicht leeren Wert zu erhalten.

Ein einfacher Ansatz wäre die Verwendung von Things.stream().flatMap(this::resolve).findFirst(). Allerdings erfordert flatMap die Rückgabe eines Streams und Optionals fehlt eine stream()-Methode.

Mögliche Lösung

Eine Lösung beinhaltet die Verwendung eines mehrstufigen Vorgangs:

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

Obwohl dieser Ansatz funktioniert, erscheint er ziemlich ausführlich.

Verbesserte Lösungen

Java 9 und spätere Versionen bieten elegantere Lösungen:

Java 16:

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

Java 9:

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

Java 8 (Problemumgehung):

Vor Java 9 kann eine Hilfsfunktion eingesetzt werden:

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

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

Diese erweiterten Lösungen bieten präzisere und effizientere Möglichkeiten zur Handhabung von Optionals innerhalb von Stream-Operationen.

Das obige ist der detaillierte Inhalt vonWie kann man optionale Werte mit Stream::flatMap und Java Streams reduzieren?. 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