Java 8 の Optional と Stream:: flatMap を簡潔にする
Java 8 ストリームを操作する場合、List
Java 16 ソリューション
Java 16 では Stream.mapMulti が導入され、より多くのストリームが可能になります。簡潔なアプローチ:
Optional result = things.stream()
.map(this::resolve)
.mapMulti(Optional::ifPresent)
.findFirst();
Java 9 ソリューション
JDK 9 では Optional.stream が追加され、タスクが簡略化されます。
Optional result = things.stream()
.map(this::resolve)
.flatMap(Optional::stream)
.findFirst();
Java 8 の解決策
Java 8 では、次のアプローチを採用できます:
Optional result = things.stream()
.map(this::resolve)
.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
.findFirst();
ヘルパー関数を使用して Optional を Stream に変換する:
static Stream streamopt(Optional opt) {
if (opt.isPresent())
return Stream.of(opt.get());
else
return Stream.empty();
}
Optional result = things.stream()
.flatMap(t -> streamopt(resolve(t)))
.findFirst();
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3