Java の Stream API は簡潔なコーディング ソリューションを提供しますが、特定のシナリオでは問題が発生する可能性があります。このような状況の 1 つは、Optional
もののリスト (List
things.stream().flatMap(this::resolve).findFirst();
ただし、 flatMap() は戻り値としてストリームを期待しますが、Optional は stream() メソッドを提供しません。
Java 16 では Stream.mapMulti() が導入され、この問題が軽減されます:
Optional<Other> result = things.stream() .map(this::resolve) .<Other>mapMulti(Optional::ifPresent) .findFirst();
Java 9 では Optional.stream() が導入され、直接変換が可能になります:
Optional<Other> result = things.stream() .map(this::resolve) .flatMap(Optional::stream) .findFirst();
残念ながら、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 サイトの他の関連記事を参照してください。