当前位置:  开发笔记 > 编程语言 > 正文

如何打破多个foreach循环?

如何解决《如何打破多个foreach循环?》经验,为你挑选了3个好方法。

我有四个foreach循环遍历集合并根据条件执行某些操作.

这是我现在写的代码:

boolean breakFlag = false;
String valueFromObj2 = null;
String valueFromObj4 = null;
for(Object1 object1: objects){
  for(Object2 object2: object1){
    // I get some value from object2
    valueFromObj2 = object2.getSomeValue();
    for(Object3 object3 : object2){
      for(Object4 object4: object3){
       // Finally I get some value from Object4.
       valueFromObj4 = object4.getSomeValue();
       // Compare with valueFromObj2 to decide either to break all the foreach loop
       breakFlag = compareTwoVariable(valueFromObj2, valueFromObj4 );
       if(breakFlag){break;}
      } // fourth loop ends here
      if(breakFlag){break;}
    } // third loop ends here
    if(breakFlag){break;}
  } // second loop ends here
  if(breakFlag){break;}
} // first loop ends here

主要对象(代码中的对象)来自第三方提供程序SDK,因此我无法更改该部分的任何内容.我想询问Stack Overflow社区是否有更好的方法来打破所有四个foreach循环.或者,如果有任何其他方法可以重构此代码,使其更具可读性和可维护性.



1> Luke Woodwar..:

在最外层循环上使用标签,并在break要跳出所有循环时在语句中包含此标签.在下面的示例中,我已修改您的代码以使用标签OUTERMOST:

String valueFromObj2 = null;
String valueFromObj4 = null;
OUTERMOST: for(Object1 object1: objects){
  for(Object2 object2: object1){
    //I get some value from object2
    valueFromObj2 = object2.getSomeValue();
    for(Object3 object3 : object2){
      for(Object4 object4: object3){
        //Finally I get some value from Object4.
        valueFromObj4 = object4.getSomeValue();
        //Compare with valueFromObj2 to decide either to break all the foreach loop
        if( compareTwoVariable(valueFromObj2, valueFromObj4 )) {
          break OUTERMOST;
        }
      }//fourth loop ends here
    }//third loop ends here
  }//second loop ends here
}//first loop ends here


这是我的问题的正确答案.但是,我像其他人建议的那样重构,并将逻辑转移到一个小函数并使用"返回".

2> Alex Reitbor..:

将所有循环提取到函数中并使用return.


这是使用break标签的首选方法,除非你知道使用break更清楚.
然后使用标签会更好

3> Pierre..:

您可以使用带标签的break语句.这种中断终止了外部陈述

请参阅break语句

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有