首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可选的isPresent与orElse(空)

可选的isPresent与orElse(空)
EN

Stack Overflow用户
提问于 2018-08-28 05:55:15
回答 2查看 21K关注 0票数 24

我在项目中更新Spring5的依赖项时,遇到了大量的编译错误,其中findOne()的方法定义已经被findById()替换,它现在返回一个Optional (如果我错了,请纠正我)。

在重构的过程中,我遇到了多种我可以选择采用的方法,因此我想要一些关于哪种方法更好的意见。

第一种方法:

代码语言:javascript
复制
ExpectedPackage ep = expectedPackageRepository.findById(1).orElse(null);
if(ep != null){
    ep.setDateModified(new Date());
    expectedPackageRepository.saveAndFlush(ep);
}

第二种方法:

代码语言:javascript
复制
Optional<ExpectedPackage> ep = expectedPackageRepository.findById(1);
if(ep.isPresent()){
    ep.get().setDateModified(new Date());
    expectedPackageRepository.saveAndFlush(ep.get());
}

或者有没有第三种更好的方法是我错过的?我看了几个问题和几篇文章,但没有找到明确的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-28 06:00:06

您还可以执行以下操作:

代码语言:javascript
复制
expectedPackageRepository.findById(1).ifPresent(
    ep -> {
        ep.setDateModified(new Date());
        expectedPackageRepository.saveAndFlush(ep);
    }
);

理想情况下,您还可以将括号之间的部分({})提取到单独的方法中。然后,你可以这样写:

代码语言:javascript
复制
    expectedPackageRepository.findById(1).ifPresent(this::doSomethingWithEp);

其中:

代码语言:javascript
复制
void doSomethingWithEp(ExpectedPackage ep) {
    ep.setDateModified(new Date());
    expectedPackageRepository.saveAndFlush(ep);
}

您可以在此处阅读ifPresent的文档:https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#ifPresent-java.util.function.Consumer-

正如它声明的那样,如果值存在,它将执行指定的操作,否则什么也不做。

票数 30
EN

Stack Overflow用户

发布于 2018-08-28 11:11:49

您还可以执行以下操作:

代码语言:javascript
复制
Optional<ExpectedPackage> updatedPackage = expectedPackageRepository.findById(1).map(ep -> {
    ep.setDateModified(new Date());
    return expectedPackageRepository.saveAndFlush(ep);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52047479

复制
相关文章

相似问题

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