我正在迁移一段代码以使用泛型。这样做的一个理由是,for循环比跟踪索引或使用显式迭代器干净得多。
在大约一半的情况下,列表(ArrayList)通过使用索引以相反的顺序迭代。
谁能建议一种更干净的方法来做到这一点(因为我不喜欢索引for循环时使用集合),尽管它确实有效?
for (int i = nodes.size() - 1; i >= 0; i--) {
final Node each = (Node) nodes.get(i);
...
}
注意:我不能在JDK之外添加任何新的依赖项。
如果列表相当小,因此性能不是真正的问题,则可以使用谷歌Guava中的lists类的反向方法。每个代码都产生相当的结果,并且原始列表保持不变。另外,反向列表是由原始列表支持的,因此对原始列表的任何更改都将反映在反向列表中。
import com.google.common.collect.Lists;
[...]
final List<String> myList = Lists.newArrayList("one", "two", "three");
final List<String> myReverseList = Lists.reverse(myList);
System.out.println(myList);
System.out.println(myReverseList);
myList.add("four");
System.out.println(myList);
System.out.println(myReverseList);
产生如下结果:
[one, two, three]
[three, two, one]
[one, two, three, four]
[four, three, two, one]
这意味着myList的反向迭代可以写成:
for (final String someString : Lists.reverse(myList)) {
//do something
}