簡體   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