Java的Stream API提供了简洁的编码解决方案,但在某些情况下可能会带来挑战。一种这样的情况涉及将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中将Optional转换为Stream?的详细内容。更多信息请关注PHP中文网其他相关文章!