我在项目中更新Spring5的依赖项时,遇到了大量的编译错误,其中findOne()
的方法定义已经被findById()
替换,它现在返回一个Optional
(如果我错了,请纠正我)。
在重构的过程中,我遇到了多种我可以选择采用的方法,因此我想要一些关于哪种方法更好的意见。
第一种方法:
ExpectedPackage ep = expectedPackageRepository.findById(1).orElse(null);
if(ep != null){
ep.setDateModified(new Date());
expectedPackageRepository.saveAndFlush(ep);
}
第二种方法:
Optional<ExpectedPackage> ep = expectedPackageRepository.findById(1);
if(ep.isPresent()){
ep.get().setDateModified(new Date());
expectedPackageRepository.saveAndFlush(ep.get());
}
或者有没有第三种更好的方法是我错过的?我看了几个问题和几篇文章,但没有找到明确的答案。
发布于 2018-08-28 06:00:06
您还可以执行以下操作:
expectedPackageRepository.findById(1).ifPresent(
ep -> {
ep.setDateModified(new Date());
expectedPackageRepository.saveAndFlush(ep);
}
);
理想情况下,您还可以将括号之间的部分({}
)提取到单独的方法中。然后,你可以这样写:
expectedPackageRepository.findById(1).ifPresent(this::doSomethingWithEp);
其中:
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-
正如它声明的那样,如果值存在,它将执行指定的操作,否则什么也不做。
发布于 2018-08-28 11:11:49
您还可以执行以下操作:
Optional<ExpectedPackage> updatedPackage = expectedPackageRepository.findById(1).map(ep -> {
ep.setDateModified(new Date());
return expectedPackageRepository.saveAndFlush(ep);
});
https://stackoverflow.com/questions/52047479
复制相似问题