我需要将下一个元素与上一个元素匹配。如果我想继续
迭代。但我不喜欢复制/粘贴分配给前一个元素:
List<Type> all;
Type prev = null;
for (Type curr : all) {
if (prev == null) {
prev = curr;
continue;
}
if (isBad(curr)) {
prev = curr;
continue;
}
if (! curr.match(prev)) {
prev = curr;
continue;
}
process(prev, curr);
prev = curr;
}
如何避免 prev = curr
重复?
我认为解决方案:
for (Type curr : all) {
if (prev != null && !isBad(curr) && curr.match(prev)) {
process(prev, curr);
}
prev = curr;
}
是作弊,因为 process(prev, curr);
不应该缩进。错误检查逻辑不应干扰主执行逻辑(强制缩进)。
最佳答案
您可以使用带有索引的 for 循环,这样您就可以读取“ahead”,并且您不应该对前一个循环使用变量,在这种情况下,i 的最后一个值必须为 size-1。
List<Type> all;
Type prev = null;
for(int i=0; i<all.size()-1; i++) {
if(isBad(all.get(i)) {
continue;
}
if(all.get(i).match(all.get(i+1)) {
continue;
}
...
}
关于java - 即使在继续时也保留 Java for 循环中集合的前一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955096/