ホームページ >Java >&#&チュートリアル >Stream:: flatMap と Java Streams を使用してオプションの値を平坦化する方法
Stream:: flatMap と Java Streams を使用したオプションの値の平坦化
Java 8 では、Stream フレームワークが簡潔なコード用の強力な API を提供します。ただし、特定のシナリオ、特にオプションが関係するシナリオでは、簡潔に表現するのが難しい場合があります。
問題ステートメント
オブジェクトのリストとメソッドがあるシナリオを考えてみましょう。各オブジェクトをオプションに解決します。目標は、オブジェクトを Optionals にマップし、最初の空でない値を取得することです。
簡単なアプローチは、things.stream(). flatMap(this::resolve).findFirst() を使用することです。ただし、 flatMap にはストリームを返す必要があり、Optional には stream() メソッドがありません。
考えられる解決策
解決策の 1 つは、複数ステップの操作を使用することです。
<code class="java">things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst();</code>
このアプローチは機能しますが、かなり冗長に見えます。
改善されたソリューション
Java 9 以降のバージョンでは、より洗練されたソリューションが提供されます。
Java 16:
<code class="java">Optional<Other> result = things.stream() .map(this::resolve) .<Other>mapMulti(Optional::ifPresent) .findFirst();</code>
Java 9:
<code class="java">Optional<Other> result = things.stream() .map(this::resolve) .flatMap(Optional::stream) .findFirst();</code>
Java 8 (回避策):
Java 9 より前では、ヘルパー関数を使用できます。
<code class="java">static <T> Stream<T> streamopt(Optional<T> opt) { return opt.isPresent() ? Stream.of(opt.get()) : Stream.empty(); } Optional<Other> result = things.stream() .flatMap(t -> streamopt(resolve(t))) .findFirst();</code>
これらの拡張されたソリューションにより、ストリーム操作内でオプションを処理するためのより簡潔かつ効率的な方法が提供されます。
以上がStream:: flatMap と Java Streams を使用してオプションの値を平坦化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。