在不存在Optional值的情况下,我想退出当前方法/函数。
我尝试过一种幼稚的方法,将return语句放入.orElseGet()中,但这似乎不起作用。到目前为止,最好的选择似乎是:
private void foo(Set<ISomeObject> someIterable) {
Optional<ISomeObject> myObjectOpt = someIterable
.stream()
.filter(...)
.findFirst();
if(!myObjectOpt.isPresent()){
return;
}
ISomeObject myObject = myObjectOpt.get();
// do something with myObject
}
这似乎比旧的Nullcheck可读性更好,还有其他选择吗?
答案 0 :(得分:2)
您可以将Consumer
传递给ifPresent
,然后在使用者中执行您想做的任何事情:
private void foo(Set<ISomeObject> someIterable) {
someIterable
.stream()
.filter(...)
.findFirst()
.ifPresent(x -> {
// do something with x
});
// do nothing!
}
答案 1 :(得分:0)
好吧,似乎您想设置ISomeObject myObject
的值,以防出现Optional的一种方法:
ISomeObject [] myObject = new ISomeObject[1]; // effectively final strikes again!
Optional<ISomeObject> myObjectOpt = someIterable
.stream()
.filter(...)
.findFirst()
.ifPresent(x -> myObject[0] = x);
但更简单的是:
myObject = someIterable
.stream()
.filter(...)
.findFirst()
.orElse(null); // in your code myObject is null by default anyway
但是,即使这没有多大意义,您是否要设置该字段,然后对其不执行任何操作?那么为什么要这样做呢?
当然,findFirst
中的Set
毫无意义。