「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java Streams でオブジェクトのリストをオプションに効率的に変換するにはどうすればよいですか?

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

2024 年 11 月 7 日に公開
ブラウズ:882

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

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

Java 8 ストリームを操作する場合、List を Optional に変換する を作成し、最初の Other 値を効率的に抽出するのは難しい場合があります。 flatMap は通常リターン ストリームを必要としますが、Optional に stream() がないことが問題を複雑にします。

Java 16 ソリューション

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

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

Java 9 ソリューション

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

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

Java 8 の解決策

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

Optional result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();

ヘルパー関数を使用して Optional を Stream に変換する:

static  Stream streamopt(Optional opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}

Optional result = things.stream()
    .flatMap(t -> streamopt(resolve(t)))
    .findFirst();
リリースステートメント この記事は次の場所に転載されています: 1729667949 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3