使用 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中文网其他相关文章!