Java 8 でオプションをストリームに変換するにはどうすればよいですか?

DDD
リリース: 2024-10-24 01:10:02
オリジナル
608 人が閲覧しました

How to Convert Optional to Stream in Java 8?

Java 8 の flatMap() を使用した Optional から Stream への変換

Java の Stream API は簡潔なコーディング ソリューションを提供しますが、特定のシナリオでは問題が発生する可能性があります。このような状況の 1 つは、Optional を変換することです。ストリームへflatMap() を使用します。

問題

もののリスト (List things) とメソッド (Optionalresolve(Thing thing)) が与えられた場合、目標は次のとおりです。それらを Optional にマップし、最初の Other を取得します。従来の解決策は次のようになります。

things.stream().flatMap(this::resolve).findFirst();
ログイン後にコピー

ただし、 flatMap() は戻り値としてストリームを期待しますが、Optional は stream() メソッドを提供しません。

Java 16 ソリューション

Java 16 では Stream.mapMulti() が導入され、この問題が軽減されます:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .<Other>mapMulti(Optional::ifPresent)
          .findFirst();
ログイン後にコピー

Java 9 の解決策

Java 9 では Optional.stream() が導入され、直接変換が可能になります:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .flatMap(Optional::stream)
          .findFirst();
ログイン後にコピー

Java 8 のソリューション

残念ながら、Java 8 には、Optional を Stream に変換する簡単な方法がありません。ただし、ヘルパー関数を利用することはできます:

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();
ログイン後にコピー

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

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