甚至可以在其中添加更多方法
findbyId(id).orElseThrow(() -> new BusinessException("bug"));
而不仅仅是异常? 所以类似
.orElseThrow(() -> { //do something here new BusinessException("bug") });
或者使用“.or”方法,我可以在其中放置更多方法,我不需要异常。所以如果不存在那么 //做这个 // 还有这个
因为使用经典方法,您将实体添加为可选,然后检查条件是否存在,如果不存在,您可以在 else{} 中做更多事情
我不确定我是否正确理解您的意思,并假设您想向
orElseThrow
添加额外的逻辑。
orElseThrow
总是抛出异常,并且该异常是从 lambda 中获取的。
如果您想在抛出异常之前添加功能,请确保返回它:
yourOptional
.orElseThrow(() -> {
//additional logic possible here
//will be executed if optional is empty
return new YourException();
});
但是,如果您想添加决定是否抛出异常的逻辑,则可以使用
or
映射到包含要返回的值的可选值,如果您想抛出异常,则返回值为空。然后,使用orElseThrow
:
yourOptional
.or(() -> {
//additional logic possible here
//will be executed if optional is empty
if(shouldThrow()){
return Optional.empty();
}
return Optional.of(someValue);
})
.orElseThrow(() -> {
return new YourException();
});