作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Optional orElse Optional in Java
(6 个回答)
6年前关闭。
我正在将一些代码移至 java8,尝试(有时强制自己)使用流和 lambda,但我对它们还不满意。
我在一个类中有一些方法来验证业务对象。每个方法看起来像
Optional<Fail> validate1(BusinessObject bo)
//first convert methods to suppliers
Supplier<Optional<Fail>> validate1= () -> validate1(bo);
Supplier<Optional<Fail>> validate2= () -> validate2(bo);
Supplier<Optional<Fail>> validate3= () -> validate3(bo);
//then some stream magic
return Stream.of(validate1, validate2, validate3)
.map(Supplier::get)
.filter(f -> f.isPresent())
.findFirst()
.orElse(Optional.empty()); //without the orElse, no error would return
// Optional(Optional.empty())
// instead of Optional.empty()
最佳答案
Optional
很像 Stream
其中包含 0 或 1 个元素。但它没有实现 Stream
,也没有 stream()
方法(就像集合一样)。
但是,转换 Optional<T>
并不难。到 Stream<T>
,这个函数做到了:
public static <T> Function<Optional<? extends T>, Stream<T>> asStream() {
return op -> op.map(Stream::of).orElseGet(Stream::empty);
}
Stream.of(validate1, validate2, validate3)
.map(Supplier::get)
.flatMap(asStream())
.findFirst();
关于lambda - 如何从 Optional<T> 列表中获取第一个非空 Optional<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880972/
我是一名优秀的程序员,十分优秀!