编程语言
首页 > 编程语言> > 返回布尔值的Java 10 ifPresentOrElse

返回布尔值的Java 10 ifPresentOrElse

作者:互联网

我对“如何正确执行此操作”感到困惑:

 // return true: if present and number of lines != 0
  boolean isValid(Optional<File> optFile) {
    return optFile.ifPresentOrElse(f -> return !isZeroLine(f), return false);
 }

 private boolean isZeroLine(File f)  {
    return MyFileUtils.getNbLinesByFile(f) == 0;
 }

我知道语法不正确且无法编译,但这仅是您理解的主意.

如何将其转换为“干净的代码”?
即避免这样做:

if (optFile.isPresent()) {//} else {//}

解决方法:

处理布尔返回类型(易于推断的谓词),一种方法可以是使用Optional.filter

boolean isValid(Optional<File> optFile) {
    return optFile.filter(this::isZeroLine).isPresent();
}

但是,然后使用Optionals参数似乎是一种不好的做法.正如卡洛斯在评论中所建议的那样,另一种实现方式可能是:

boolean isValid(File optFile) {
    return Optional.ofNullable(optFile).map(this::isZeroLine).orElse(false);
}

另一个需要注意的是,ifPresentOrElse是在执行一些与Optional值相对应的动作时要使用的结构,例如:

optFile.ifPresentOrElse(this::doWork, this::doNothing)

相应的动作可能是-

private void doWork(File f){
     // do some work with the file
}

private void doNothing() {
     // do some other actions
}

标签:java-10,optional,java,lambda
来源: https://codeday.me/bug/20191108/2008529.html