hac*_*ife 5 java loops break sonarqube
出于代码质量原因,我想稍微重构一下我的代码,以便break在循环中仅使用一个语句。但我不确定我是否可以按照 SonarQube 要求我的方式做到这一点......
这是我的代码:
for (Integer integer: integerKey.keySet()) {
if (map.containsKey(integerKey.get(integer))) {
TypeValue value = map.get(integerKey.get(integer));
sb.append(integerKey.get(integer)).append(":");
sb.append(encodeValue(value));
sb.append("|");
if (integerKey.get(integer).equals(min)) {
break;
}
} else if (integerKey.get(integer) <= min){
TypeValue value = map.get(min);
sb.append(min).append(":");
sb.append(encodeValue(value));
sb.append("|");
break;
} else {
sb.append(integerKey.get(integer)).append(":");
sb.append("0");
sb.append("|");
}
}
Run Code Online (Sandbox Code Playgroud)
我想做同样的事情,但只使用一个break,但我不确定if在这种情况下我可以只写一个条件而不是if-elseif-else.
有任何想法吗 ?
谢谢。
您可以为中断条件定义一个变量并将其包含到 for 循环条件中:
boolean endLoop = false;
for (Iterator<Integer> keys = integerKey.keySet(); keys.hasNext() && !endLoop; ) {
Integer integer = keys.next();
if (map.containsKey(integerKey.get(integer))) {
...
if (integerKey.get(integer).equals(min)) {
endLoop = true;
}
} else if (integerKey.get(integer) <= min){
...
endLoop = true;
} else {
...
}
}
Run Code Online (Sandbox Code Playgroud)
或者在循环中声明一个局部变量,如果循环应该有一个中断,则该变量设置为 true:
for (Integer integer: integerKey.keySet()) {
boolean endLoop = false;
if (map.containsKey(integerKey.get(integer))) {
...
if (integerKey.get(integer).equals(min)) {
endLoop = true;
}
} else if (integerKey.get(integer) <= min){
...
endLoop = true;
} else {
...
}
if (endloop)
break;
}
Run Code Online (Sandbox Code Playgroud)