Heim >Java >javaLernprogramm >Wie konvertiert man optional in Stream in Java 8?

Wie konvertiert man optional in Stream in Java 8?

DDD
DDDOriginal
2024-10-24 01:10:02679Durchsuche

How to Convert Optional to Stream in Java 8?

Optional in Stream mit flatMap() von Java 8 konvertieren

Die Stream-API von Java bietet prägnante Codierungslösungen, aber es gibt bestimmte Szenarien, die eine Herausforderung darstellen können. Eine solche Situation beinhaltet die Konvertierung eines optionalen zu einem Stream mit flatMap().

Das Problem

Angesichts einer Liste von Dingen (List Things) und einer Methode (Optionalsolve(Thing thing)) besteht das Ziel darin Ordnen Sie die Dinge Optionals zu und rufen Sie das erste Other ab. Die herkömmliche Lösung wäre:

things.stream().flatMap(this::resolve).findFirst();

Allerdings erwartet flatMap() einen Stream als Rückgabewert, während Optional keine stream()-Methode bereitstellt.

Java 16-Lösung

Java 16 führt Stream.mapMulti() ein und lindert dieses Problem:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .<Other>mapMulti(Optional::ifPresent)
          .findFirst();

Java 9-Lösung

Java 9 führt Optional.stream() ein und ermöglicht die direkte Konvertierung:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .flatMap(Optional::stream)
          .findFirst();

Java 8-Lösung

Bedauerlicherweise fehlt in Java 8 eine einfache Methode zum Konvertieren von Optional in Stream. Es kann jedoch eine Hilfsfunktion genutzt werden:

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();

Das obige ist der detaillierte Inhalt vonWie konvertiert man optional in Stream in Java 8?. 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