Java:跳过嵌套循环

Java:跳过嵌套循环,java,loops,nested,Java,Loops,Nested,我知道我可以通过这种方式从内部到外部跳过java中的循环: loop1: for (Object o : objects1){ loop2: for (Object o : objects2){ if (o.getSomething()) continue loop1 ; } } 但我怎么能反过来,也就是从外部检查是否执行了循环: loop1: for (Object o : objects1){ if (condition) continue loop3

我知道我可以通过这种方式从内部到外部跳过java中的循环:

loop1:
for (Object o : objects1){
   loop2:
   for (Object o : objects2){
       if (o.getSomething()) continue loop1 ;
   }
}
但我怎么能反过来,也就是从外部检查是否执行了循环:

loop1:
for (Object o : objects1){
   if (condition) continue loop3;
   loop2:
   for (Object o : objects2){
       loop3:
       for (Object o : objects2){

       }
   }
}
如果(条件)继续循环3;显然不起作用,但你明白了

我为什么要这么做? 我用大量嵌套循环检查每个项目组合。在循环中创建条件。基于这些条件,并非所有后续循环都是必需的,因此跳过它们将大大提高性能

有什么想法吗

想说得更清楚一些:

ItemSet<Item> set = new ItemSet<>();

for (Item a : itemtype1){
   for (Item b: itemtype2){
      set.add(a);
      set.add(b);
      if (set.getX() == 1) "execute from loop1 on"
      if (set.getX() == 2) "execute from loop2 on"

      loop1:
      for (Item c : itemtype3){
          loop2:
          for (Item d : itemtype4){
              //execute final code here - this must be reached in any case
          }
      }
   }
}
ItemSet=newitemset();
对于(项目a:项目类型1){
用于(项目b:项目类型2){
增加(a);
增加(b);
如果(set.getX()==1)“从循环1开始执行”
如果(set.getX()==2)“从loop2开始执行”
循环1:
用于(项目c:项目类型3){
循环2:
用于(项目d:项目类型4){
//在这里执行最终代码-在任何情况下都必须达到这一点
}
}
}
}

如果您的问题是在内部循环中设置某些条件不允许外部循环看到它,您可以在所有循环之外定义该条件,使其成为所有循环的全局条件。
如果没有,请指定您想要实现的目标

boolean condition;
loop1:
for (Object o : objects1){
   if (condition) continue loop3;
   loop2:
   for (Object o : objects2){
       loop3:
       for (Object o : objects2){
            if (something_trivial()){
                condition = false;
                continue loop1;
            }
       }
   }
}

使loop3成为一个方法,并在需要时调用它,例如:

void optimizedFunction(){
    loop1:
    for (Object o : objects1){
       if (condition) { loop3(objects2); continue;}
       loop2:
       for (Object o : objects2){
           loop3(objects2)
       }
    }
}



void loop3(List objects2){
       for (Object o : objects2){

       }
}

你的问题没有多大意义。要么继续/中断解决您的问题,要么无法解决。不清楚你到底想做什么

使用while循环或显式for循环可以让您精确控制正在发生的事情, 例如,如果您在内部循环中发现了一个对象,而该对象是唯一安装在其中的对象,则可以执行以下操作:

int iMin = 0;
int jMin = 0;
int iMax = object1.size();
int jMax = object2.size();

for(int i = iMin; i < iMax; i++) {
   for(int j = jMin; j < jMax; j++) {
      if(object1.get(i).someComparison(object2.get(j))) {
          jMin = i;
          jMax = i+1;
          break; //this will break the inner loop and continue the outer one
      }
   }
}
int-iMin=0;
int jMin=0;
int iMax=object1.size();
int jMax=object2.size();
对于(int i=iMin;i

另一方面,您始终可以访问在内部作用域中的外部作用域中声明的条件,因此您没有理由希望在尝试继续的循环中加入continue。

但您得到的想法是:不,我不,不幸的是,也许你应该考虑重构代码,以便使用更小的方法。你想要做的是典型的过早优化,这在Java中更是一个主要的缺点,你有JIT来完成它。如果我理解正确,你想跳过第二个循环,所以它永远不会迭代?我不确定是否有这样做的方法,也不确定这是一个好主意的好例子。你有更具体的例子吗?你在内外循环中声明o,这样你的代码就不会编译了。您的编辑使事情变得更奇怪,您尝试的是跳转到某一行,这在java中是不可能的,如果您跳过该行,您还希望从外部循环中得到o1的值吗?它仍在范围内,但从未分配anything@reckter这正是我想要做的,当成功的循环仍在执行时,这段代码不会编译,也不会解决问题。这段代码将如何允许OP“跳过嵌套循环”?由于
continue loop3
试图跳入嵌套循环,因此无法跳入该循环。@MAV:OP的问题含糊不清,表述不正确。我的例子展示了OP可能想要解决的一个问题的解决方案,“从外部检查是否执行了一个循环”这个问题无法更清楚地表述出来。您的示例正好相反。“继续/中断可以解决您的问题,也可以不解决。”…可以通过条件解决。“这是从外部检查是否执行了循环”您的代码从内部检查。“另一方面,您可以随时访问在外部范围内声明的条件”舒尔,但当我们谈论大量数据时,在10个不必要的循环内这样做需要很多时间。就像我说的,告诉我您到底想做什么,我可以帮您,我甚至不知道您的意思。你在概括你的问题,但我们需要知道你到底想要什么。删除问题的第一部分,即你所知道的,并提供更多关于问题的信息。当方法不是最内在的时候,这不起作用