在java中以相反的顺序遍历列表

新手上路,请多包涵

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

在大约一半的情况下,现在使用索引以相反的顺序迭代列表(一个 ArrayList)。

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

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

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

原文由 Allain Lalonde 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 341
2 个回答

尝试这个:

 // 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());
}

原文由 John Feminella 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

例子

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

原文由 Geoffrey Zheng 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题