我想颠倒访问 for() 内列表的顺序
这是我的实际代码
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--
但它不起作用。有人可以提供建议吗?
我已经尝试过其他方法,例如使用
,但它不起作用。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();
试试这个:
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
}
如果你想在访问元素时删除元素,那么你必须使用简单的迭代器,因为这是不可能的......它会抛出并发修改异常
for (ListIterator<State> i = states.listIterator(states.size()); i.hasPrevious(); ) {
State value = i.previous();
System.out.println(states.size());
value.update(true); // restore the first blockstate
i.remove(); // remove the first blockstate from the list
}
您指定的所需代码以相反的顺序迭代列表中的每个元素,并为其访问的每个元素执行以下操作:
update
方法ListIterator
类允许以相反的顺序迭代列表、访问每个元素以及从列表中删除当前元素。 因此,它可以用来实现您既定的目标。