假设我有一个 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>
不是一个 list 。
看来如果 JDK 中有 ifPresentThrow() 方法可用,就可以满足我的目的。
是的,这段代码可以用我不想要的命令式风格编写。所以我的问题是 ifPresentThrow() 可以实现同样的事情,或者有更好的方法以函数式风格实现它。提前致谢。
最佳答案
你最好使用“存在”。
if (repository.existsByName(branchName)) {
throw ...
}
它更有用,因为它不会从数据库中检索对象,只是 true/false。
关于java - 如果存在Optional<>值则抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897853/