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;
}
}
代码如下:
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;
}
}