如果存在Optional <>值,则引发异常

问题描述 投票:1回答:2

假设我有一个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()或以一种更好的方式以函数样式进行操作是一样的事情。预先感谢。

java java-8 stream java-stream optional
2个回答
1
投票

您可以将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);

0
投票

您最好使用“ exists”。

if (repository.existsByName(branchName)) {
    throw ...
}

它更有用,因为它不会从db中检索对象,只有true / false。

© www.soinside.com 2019 - 2024. All rights reserved.