我有以下代码块,要求我检查是否存在多个嵌套变量。这些最初是空检查,我将其替换为Optional
和ifPresent()
。
我想使用ifPresent()
而不是查询get()
来减轻潜在的运行时异常。但是,这导致了很多嵌套。
我可以在此示例中利用lambda来实现相同的流程而不进行嵌套吗?
void SomeMethod() {
procA().ifPresent(a -> {
procB(a).ifPresent(b -> {
// Do something
return;
});
});
throw new SomeException();
}
最佳答案
您可以使用 flatMap
:
procA().flatMap(this::procB).ifPresent(b -> {
// do something
});
至于return语句,您不能从lambda内部的外部方法返回。如果要在缺少值时引发自定义异常,请使用
orElseThrow
:B b = procA()
.flatMap(this::procB)
.orElseThrow(SomeException::new);
// do something with b
或者,当然,您可以只调用
get
并让它抛出NoSuchElementException
。