在 java 中以相反的顺序循环访问列表

2022-08-31 05:27:05

我正在迁移一段代码以使用泛型。这样做的一个论点是,for 循环比跟踪索引或使用显式迭代器要干净得多。

在大约一半的情况下,列表(ArrayList)通过使用今天的索引以相反的顺序进行迭代。

有人可以建议一种更简洁的方法来做到这一点吗(因为我不喜欢使用集合时),尽管它确实有效?indexed for loop

 for (int i = nodes.size() - 1; i >= 0; i--) {
    final Node each = (Node) nodes.get(i);
    ...
 }

注意:我无法在 JDK 之外添加任何新的依赖项。


答案 1

试试这个:

// Substitute appropriate type.
ArrayList<...> a = new ArrayList<...>();

// Add elements to list.

// Generate an iterator. Start just after the last element.
ListIterator li = a.listIterator(a.size());

// Iterate in reverse.
while(li.hasPrevious()) {
  System.out.println(li.previous());
}

答案 2

Guava提供Lists#reverse(List)ImmutableList#reverse()。与番石榴的大多数情况一样,如果参数是 ,则前者委托给后者,因此您可以在所有情况下使用前者。这些不会创建列表的新副本,而只是它的“反向视图”。ImmutableList

List reversed = ImmutableList.copyOf(myList).reverse();