如果存在可选项,如何返回,如果不存在则继续

din*_*707 5 java java-8

我有一个可选的方法返回Cat对象(这是一个可选的).从我称之为It的地方,我想以某种方式处理它if cat is present then return otherwise continue

Opitional<Cat> option = isCatFound();
if (option.isPresent()) {
return option.get();
}
//DO STUFF HERE IF NO CAT FOUND
Run Code Online (Sandbox Code Playgroud)

上面的代码就是我现在拥有的代码.我喜欢使用比这更好的东西,单线解决方案.

有可能吗?或者正确使用可选方式?

Hol*_*ger 9

由于您的方法必须在最后返回该类型的值,您可以使用

Optional<Cat> option = isCatFound();
return option.orElseGet(() -> {
  // DO STUFF HERE IF NO CAT FOUND
  // WHICH WILL EVENTUALLY RETURN A VALUE
};
Run Code Online (Sandbox Code Playgroud)

如果您的"找不到猫的东西"适合单行,那么它可能是一种选择.否则,我认为原始代码没有任何优势.特别是因为它的缺点是替代代码路径不能再抛出已检查的异常.


See*_*ose 9

Optional类提供了一个方法,正是出于这个目的:orElseGet(Supplier).所以,使用一些小助手方法,您可以这样做:

Optional<Cat> option = isCatFound();
return option.orElseGet(this::noCatFound);

private Cat noCatFound() {
    // do whatever is appropriate here
    return null;
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以将辅助方法的主体移动到为该方法提供的lambda exprssion中orElseGet.