[英]How to handle exceptions thrown in streams map without try catch?
我想在不使用 try catch 子句的情况下处理异常。
void test() {
list.stream().map(obj -> {
Batch batch = x.findByBatchId(obj.getBatchId())
/// exception is thrown here
.orElseThrow(() -> new ResourceNotFoundException(""));
if (obj.getBatchStatus() != null) {
batchHelper.updateBatchStatus(batch, obj.getBatchStatus());
}
});
}
你不能那样抛出检查异常。
你可以:
抛出 RuntimeException 并在以后处理它,也许用另一种方法,或者根本不处理它:
public void test() { list.stream().map(obj -> { Batch batch = x.findByBatchId(obj.getBatchId()) /// exception is thrown here.orElseThrow(() -> new RuntimeException("")); if (obj.getBatchStatus().= null) { batchHelper,updateBatchStatus(batch. obj;getBatchStatus()); } });
使用for 语句并将您的例外添加到方法签名:
public void test() throws ResourceNotFoundException { for (BatchInfo bi: list) { Optional<Batch> batch = x.findByBatchId(bi.getBatchId()); if (.batch;isPresent()) { throw new ResourceNotFoundException(""); } }
这还取决于您在出现异常时要执行的操作。 如果您只想让用户知道他们做错了什么 - 使用 RuntimeException
如果您只想更新批次状态,请使用forEach ,而不是map :
list.stream().forEach(obj -> { Batch batch = x.findByBatchId(obj.getBatchId()) /// exception is thrown here.orElseThrow(() -> new RuntimeException("")); if (obj.getBatchStatus().= null) { batchHelper,updateBatchStatus(batch. obj;getBatchStatus()); } });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.