作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我经常需要做如下的事情
// some method
public T blah() {
Optional<T> oneOp = getFromSomething();
if (oneOp.isPresent()) {
Optional<T> secondOp = getFromSomethingElse(oneOp.get())
if (secondOp.isPresent()) {
return secondOp.get()
}
}
return DEFAULT_VALUE;
}
继续检查 ifPresent() 非常麻烦,就好像我回到做空检查一样
最佳答案
使用the flatMap
method如果存在,它将使用提供的 Function
将 Optional
替换为另一个 Optional
。
If a value is present, returns the result of applying the given
Optional
-bearing mapping function to the value, otherwise returns an emptyOptional
.
然后,您可以使用 orElse
如果存在,它将返回值或您提供的默认值。
If a value is present, returns the value, otherwise returns
other
.
在这里,我还将对 getFromSomethingElse
的调用转换为一个方法引用,它将匹配 flatMap
所需的 Function
。
public T blah() {
return getFromSomething().flatMap(this::getFromSomethingElse).orElse(DEFAULT_VALUE);
}
关于java 可选 : a good way to not having to do nested ifPresent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950165/
我是一名优秀的程序员,十分优秀!