这是我另一个问题的分支:如何在lambda中链接Optional#ifPresent()而不进行嵌套?
但是,现在的问题是如何提供一个lambda解决方案,其中所有可选值都在最内部作用域中可用:
B b = procA().flatMap(this::procB).orElseThrow(SomeException::new);
// Value from procA() is not available.
Run Code Online (Sandbox Code Playgroud)
我的原始代码是:
void SomeMethod() {
procA().ifPresent(a -> {
procB(a).ifPresent(b -> {
// Do something with a and b
return;
});
});
throw new SomeException();
}
Run Code Online (Sandbox Code Playgroud)
我了解return最内在的范围是错误的。新flatMap示例说明了正确的行为。
我使用ifPresent()而不是get()避免潜在的运行时异常,在这种情况下,我可能无法检查是否为optional的值isPresent()。