Java - 如果内循环中的任何元素的条件为真,则跳过外循环的元素

Java - Skipping element of outer loop if condition is true for any element in inner loop

代码如下:

for ( Element e : elements ){
    boolean shouldContinue = false;
    for ( OtherElement oe : otherElements ){
        if ( e.magicalCondition(oe) ){
            shouldContinue = true;
            break;
        }
    }
    if (shouldContine){
        continue;
    }  
    otherLogic(e);
}

我想要做的是检查内部循环中的条件,如果满足所述条件,则跳过此 Element,但 otherLogic() 应应用于所有其他 Elements,其中条件不满足。

我会使用两种或三种方法拆分 Stream:

elements.stream()
        .filter(this::shouldApplyOtherLogic)
        .forEach(this::otherLogic);

boolean shouldApplyOtherLogic(Element e) {
  return otherElements.stream().noneMatch(oe -> e.magicalCondition(oe)); // or e::magicalCondition
}

如果您更习惯for,那么第二种方法会更好:

for (Element e : elements) {
  if (shouldApplyOtherLogic(e)) {
    otherLogic(e);
  }
}

boolean shouldApplyOtherLogic(Element e) {
  for ( OtherElement oe : otherElements) {
    if (e.magicalCondition(oe)) {
      return false;
    }
  }
  return true;
}
 

怪癖是反转逻辑:搜索您应该应用逻辑的元素然后应用逻辑(而不是查找您不想应用逻辑的元素)。

该方法还进一步包含您的代码正在做什么。

你提到的是如果条件满足,跳过 Element,所以我认为内部循环否则条件需要 break :

for (Element e : elements) {
  for (OtherElement oe : otherElements) {
    if (!e.magicalCondition(oe)) {
      otherLogic(e);
    } else
      break;
  }
}