Mos*_*our 5 java optional java-8
假设我有一个Spring Data Repository方法。
Optional<Branch> findByName(@Nonnull final String name);
Run Code Online (Sandbox Code Playgroud)
我的业务逻辑是,如果我发现此方法执行有任何价值,我将抛出异常。
我可以这样做例如:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
Run Code Online (Sandbox Code Playgroud)
或另一种方式:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
Run Code Online (Sandbox Code Playgroud)
我不确定在这种情况下使用过滤器是否合适,因为我的方法Optional<Branch>
未返回列表。似乎在JDK中,如果有ifPresentThrow()方法可用,那将达到我的目的。
是的,此代码可以我不希望使用的命令式代码编写。所以我的问题是,是否可以实现PresentThrow()或以一种更好的方式以函数样式进行操作是一样的事情。提前致谢。
小智 9
您最好使用“存在”。
if (repository.existsByName(branchName)) {
throw ...
}
Run Code Online (Sandbox Code Playgroud)
它更有用,因为它不会从db中检索对象,而只是true / false。
您可以使用ifPresentwith块引发异常
branchRepository.findByName(branch.getName()).ifPresent(s -> {
throw new NameNotAvailableException();
});
Run Code Online (Sandbox Code Playgroud)
或者一个简单的if块看起来也更干净
if(branchRepository.findByName(branch.getName()).isPresent()) {
throw new NameNotAvailableException();
}
Run Code Online (Sandbox Code Playgroud)
或者您可以创建一个方法来引发异常
public void throwException(Object str) {
throw new NameNotAvailableException();
}
Run Code Online (Sandbox Code Playgroud)
然后就叫它
branchRepository.findByName(branch.getName()).ifPresent(this::throwException);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |