首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回布尔值Java10 ifPresentOrElse

返回布尔值Java10 ifPresentOrElse
EN

Stack Overflow用户
提问于 2018-10-03 06:29:23
回答 1查看 3.1K关注 0票数 4

我对“如何正确地做这件事”有点困惑:

代码语言:javascript
复制
 // 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;
 }

我知道语法不正确,不能编译,但这只是你的想法。

我怎么才能把它变成“干净的代码”呢?例如,避免做以下事情:

代码语言:javascript
复制
if (optFile.isPresent()) {//} else {//}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 09:50:05

处理布尔返回类型(很容易推断出Predicate),一种方法是使用Optional.filter

代码语言:javascript
复制
boolean isValid(Optional<File> optFile) {
    return optFile.filter(this::isZeroLine).isPresent();
}

但是,使用Optional的参数似乎是一种糟糕的做法。正如卡洛斯在评论中所建议的那样,实现它的另一种方式可能是:

代码语言:javascript
复制
boolean isValid(File optFile) {
    return Optional.ofNullable(optFile).map(this::isZeroLine).orElse(false);
}

另一方面,ifPresentOrElse是在执行与存在Optional值相对应的某些操作时使用的构造,例如:

代码语言:javascript
复制
optFile.ifPresentOrElse(this::doWork, this::doNothing)

其中相应的动作可以是-

代码语言:javascript
复制
private void doWork(File f){
     // do some work with the file
}

private void doNothing() {
     // do some other actions
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52617309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档