java - 如何打破多个 foreach 循环?

标签 java refactoring foreach

我有四个 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,因此我无法更改该部分的任何内容。我想问问 StackOverflow 社区是否有更好的方法来打破所有四个 foreach 循环。或者如果有任何其他方法可以重构此代码以使其更具可读性和可维护性。

最佳答案

在最外层循环使用一个标签,当你想跳出所有循环时,在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

关于java - 如何打破多个 foreach 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551578/

相关文章:

java - Kie-Execution Server 的源代码

javascript - 在 javascript 中编写更高效的代码

c++ - 您在实践中使用了哪些 C++ 重构?

Java awt Swing - 我遇到错误了吗?

java - 找不到依赖项 'org.springframework.boot:spring-boot-starter-web:2.3.0.RELEASE'

java - Spring Boot 中的 JDBC 授权

ruby-on-rails - 在 Rails 测试套件中使用工厂的优点和缺点?

perl - Perl中foreach循环自动获取循环索引

c# - 将 2 个列表与 foreach 循环进行比较,并根据未找到的项目创建新列表

java - ForEach 循环中断和连接线程