如何将Optional<T>转换为Stream<T>?已有实现,求更简洁写法
更简洁的Optional转Stream实现方式
嘿,你的实现思路没问题,但在Java 9及以上的版本里,其实有原生的更简洁的方案——直接使用Optional类自带的stream()方法!
这个方法完全贴合你的需求:
- 当
Optional持有值时,返回包含该值的单元素Stream - 当
Optional为空时,返回空的Stream
用法非常直观,举两个例子:
// 持有值的场景 Optional<String> hasValue = Optional.of("hello"); Stream<String> valueStream = hasValue.stream(); // 得到包含"hello"的Stream // 空值的场景 Optional<String> emptyOpt = Optional.empty(); Stream<String> emptyStream = emptyOpt.stream(); // 得到空Stream
如果你的项目还停留在Java 8环境下,那你自己写的实现已经是很优雅的方案了,还可以稍微简化下写法(逻辑完全一致):
public static <T> Stream<T> stream(Optional<T> optional) { return optional.map(Stream::of).orElse(Stream.empty()); }
把orElseGet换成orElse就好,因为Stream.empty()是静态常量,不会产生额外的创建开销,写法也更简洁。
内容的提问来源于stack exchange,提问作者Jelly Orns
相关产品推荐
相关产品推荐

