【问题标题】:Call method and handle excption using java 8 foreach loop [closed]使用java 8 foreach循环调用方法和处理异常[关闭]
【发布时间】:2018-08-03 14:19:53
【问题描述】:

如果条件满足我正在执行下面的代码我正在生成异常,但是即使我会得到异常我想跳过那个循环并想要执行保留代码所以有什么办法吗?

public class Test {

    public static void main(String[] args) {

        List<String> items = new ArrayList<>();
        items.add("1");
        items.add("2");
        items.add("3");
        items.add("4");
        items.add("5");

        try {
            items.forEach(item -> getData(item));
        } catch (Exception e) {

            e.printStackTrace();
        }

    }

    public static void getData(String item) {
        System.out.println("====getData method called" + item + "====");
        if (item.equals("1")) {
            System.out.println(1 / 0);
        }



    }

}

【问题讨论】:

  • 不清楚。即使该行之前的 3 行代码抛出异常,您是否要执行 System.out.println("execute remaining code"); 行?如果是这样,捕获异常。如果即使getData(item) 抛出异常,您也想执行循环的剩余迭代,那么再一次:将对 getData() 的调用包装在 try 块中,并捕获异常。
  • 如果你在你的循环之外捕捉到异常,你已经退出了循环。如果你在循环内部捕获异常(例如在getData内部),你可以继续循环。
  • 我只想忽略异常并执行剩余代码的循环
  • @Tejal 检查答案。它应该适合你。

标签: java java-8 java-stream


【解决方案1】:

try/catch 移动到循环内?

    items.forEach(item -> {
        try {
            getData(item);
        } catch (Exception e) {
            e.printStackTrace();
        }
    });

【讨论】:

    【解决方案2】:

    您可以在可能发生异常的代码块中将 try catch 放入 getData 方法中,这样在这种情况下,如果发生任何异常,它将继续循环其他项目:

    public static void getData(String item) {
            try {
                 System.out.println("====getData method called" + item + "====");
                 if (item.equals("1")) {
                     System.out.println(1 / 0);
                 }
            } catch (Exception e) {
                System.out.println("Exception at item: " + item);
                e.printStackTrace();
            } 
     }
    

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 2011-10-19
      • 2019-01-15
      • 2014-11-11
      • 1970-01-01
      • 2017-07-06
      相关资源
      最近更新 更多