我想颠倒在for()
中访问List的顺序这是我的实际代码
for(int i = 0; i < states.size(); i++) {
System.out.println(states.size());
states.get(i).update(true); // restore the first blockstate
states.remove(i); // remove the first blockstate from the list
}
此代码有效,但我想撤消它。我已经尝试过其他方法,比如使用i--
,但它没有用。有人可以提出建议吗?
答案 0 :(得分:5)
我已经尝试过其他方式,例如使用
i--
,但它不起作用。
撤销for
循环包含三个步骤:
++
变为--
)在您的代码中,此更改将如下所示:
for(int i = states.size()-1 ; i >= 0 ; i--) {
System.out.println(states.size());
states.get(i).update(true); // restore the current blockstate
states.remove(i); // remove the current blockstate from the list
}
请注意,原始循环中达到的最后一个值为states.size()-1
,而不是states.size()
,因此i
也需要从states.size()-1
开始。
由于您的循环最终会清除列表,但是一次只能清除一个元素,您可以通过删除remove(i)
的调用来更清晰,在循环后将其替换为states.clear()
。
for(int i = states.size()-1 ; i >= 0 ; i--) {
System.out.println(states.size());
states.get(i).update(true); // restore the current blockstate
}
states.clear();
答案 1 :(得分:0)
试试这个:
List list = Lists.reverse(states);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.size());
list.get(i).update(true); // restore the first blockstate
//list.remove(i); // remove the first blockstate from the list
}
如果你想在访问元素时删除元素,那么你必须使用iterator,因为它是不可能的......它会抛出并发修改异常