ホームページ >Java >&#&チュートリアル >Java Streams でオブジェクトのリストをオプションに効率的に変換するにはどうすればよいですか?

Java Streams でオブジェクトのリストをオプションに効率的に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 16:16:02342ブラウズ

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

Java 8 の Optional と Stream:: flatMap を簡潔にする

Java 8 ストリームを扱う場合、List を変換します。任意<その他>へ最初の Other 値を効率的に抽出するのは難しい場合があります。 flatMap には通常リターン ストリームが必要ですが、Optional に stream() がないことが問題を複雑にしています。

Java 16 ソリューション

Java 16 では Stream.mapMulti が導入され、より多くのストリームが可能になります。簡潔なアプローチ:

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

Java 9 ソリューション

JDK 9 では Optional.stream が追加され、タスクが簡素化されます:

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

Java 8 の解決策

Java 8 では、次のアプローチを採用できます:

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

ヘルパー関数を使用して、Optional を 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>

以上がJava Streams でオブジェクトのリストをオプションに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。