假设我有一个Spring Data Repository方法。
Optional<Branch> findByName(@Nonnull final String name);
如果我发现此方法执行有任何值,我会抛出异常。
例如,我可以这样做:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
或另一种方式:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
我不确定在这种情况下使用过滤器是否合适,因为我的方法返回Optional<Branch>
没有清单。似乎在JDK中,如果有ifPresentThrow()方法可用,那将达到我的目的。
是的,此代码可以我不希望使用的命令式代码编写。所以我的问题是,是否可以实现PresentThrow()或以一种更好的方式以函数样式进行操作是一样的事情。预先感谢。
您可以将ifPresent
与代码块一起使用引发异常
branchRepository.findByName(branch.getName()).ifPresent(s->{
throw new NameNotAvailableException();
});
或者简单的if
块也看起来更干净
if(optional.isPresent())
throw new NameNotAvailableException();
或者您可以创建一个方法来引发异常
public void throwException(Object str) {
throw new NameNotAvailableException();
}
然后叫它
branchRepository.findByName(branch.getName()).ifPresent(this::throwException);
您最好使用“ exists”。
if (repository.existsByName(branchName)) {
throw ...
}
它更有用,因为它不会从db中检索对象,只有true / false。