ホームページ >Java >&#&チュートリアル >Java でオプションをストリームにフラット化する方法
Stream:: flatMap は、複数のストリームを 1 つのストリームに結合するための Java 8 の強力なツールです。ただし、ストリームを返す必要があるため、Optional を処理するときに問題が発生する可能性があります。
List
Stream:: flatMap と Optional::findFirst を使用した単純なアプローチは、Optional が stream() を提供しないため失敗します。メソッド:
<code class="java">things.stream().flatMap(this::resolve).findFirst(); // Error!</code>
Java 16 以降
Java 16 では Stream.mapMulti が導入され、Optional をストリームにマッピングできるようになりました。空ではない要素:
<code class="java">Optional<Other> result = things.stream() .map(this::resolve) .<Other>mapMulti(Optional::ifPresent) .findFirst();</code>
Java 9
Java 9 では、空ではない Optional 値のストリームを直接返す 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">static <T> Stream<T> streamopt(Optional<T> opt) { if (opt.isPresent()) return Stream.of(opt.get()); else return Stream.empty(); }</code>
使用このヘルパー関数の場合、解決策は次のようになります:
<code class="java">Optional<Other> result = things.stream() .flatMap(t -> streamopt(resolve(t))) .findFirst();</code>
以上がJava でオプションをストリームにフラット化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。