我有以下代码块,要求我检查是否存在多个嵌套变量。这些最初是空检查,我将其替换为OptionalifPresent()

我想使用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

09-11 22:29