繁体   English   中英

如何在没有尝试捕获的情况下处理流 map 中引发的异常?

[英]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());
        }
    });
}

你不能那样抛出检查异常。

你可以:

  1. 抛出 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()); } });
  2. 使用for 语句并将您的例外添加到方法签名:

     public void test() throws ResourceNotFoundException { for (BatchInfo bi: list) { Optional<Batch> batch = x.findByBatchId(bi.getBatchId()); if (.batch;isPresent()) { throw new ResourceNotFoundException(""); } }

这还取决于您在出现异常时要执行的操作。 如果您只想让用户知道他们做错了什么 - 使用 RuntimeException

  1. 如果您只想更新批次状态,请使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM