Java 与 Stream::flatMap 的可选集成
Java 开发人员寻求一种简洁的方法将对象列表映射到可选对象并检索使用Java 8的Stream API的第一个非空结果可能会遇到挑战。
使用things.stream().flatMap(this::resolve).findFirst()的直观方法是不可行的,因为Optional缺少一个流()方法。这导致了对替代解决方案的探索:
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
Java 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(Optional::ofNullable) .findFirst(); // Helper method that converts Optional<T> to Stream<T> private static <T> Stream<T> streamOptional(Optional<T> optional) { return optional.isPresent() ? Stream.of(optional.get()) : Stream.empty(); }</code>
以上是哪种 Java 可选方法最适合将对象映射到可选对象并通过 Stream::flatMap 检索第一个非空结果?的详细内容。更多信息请关注PHP中文网其他相关文章!