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

Barbara Streisand
リリース: 2024-10-23 16:16:02
オリジナル
253 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!