Java 8 の Optional と Stream:: flatMap を簡潔にする
Java 8 ストリームを扱う場合、List
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 サイトの他の関連記事を参照してください。