如何在异常时使用 foreachordered 继续对下一个元素执行操作?

问题描述

只是尝试一个简单的例子来理解使用 foreachordered 进行流式处理时的异常处理。请写下在当前元素抛出异常 (1) 时我们如何继续对 list(20) 的下一个元素执行操作的建议。

  try {
      List<Integer> list = Arrays.asList(10,1,20,15,2); 
      list.stream().forEachOrdered(num->{
          if(num>2) {
              System.out.println(num);
          }else {
              int result=num/0;
              System.out.println(result);
          }
      });
      
      
  }catch(Exception e) {
      System.out.println("Exception: "+e);
      
  }

解决方法

为了继续循环,您需要捕获其中的异常

List<Integer> list = Arrays.asList(10,1,20,15,2); 
list.stream().forEachOrdered(num -> {
    if(num > 2) {
        System.out.println(num);
    } else {
        try {
            int result = num/0;
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

这样当异常被捕获和处理时,它不会干扰下一个循环。您当然可以将 if 的整个条件放入 try-catch 块中,但没有理由这样做。