java - 如果存在Optional<>值则抛出异常

标签 java java-8 option-type

假设我有一个 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/

相关文章:

java - Spring Security CSRF 支持手动安全配置

java - Recyclerview 调用 notifyItemChanged 导致空白项

java - 解释 OOP 中的封装

typeclass - 如何使用 Agda 标准库的类型类实例,例如也许是适用的?

swift - 关于在 Swift 中声明可选项和非可选项

java - OptaPlanner 中的多项目作业调度

java - 为两个或多个方法实现匿名类

java - 如何强制 Java 8 流按顺序执行?

java - 如何有效地在双循环中执行条件检查?

swift - 为什么可选不发出警告或要求强制解开?