【发布时间】:2017-07-03 08:42:23
【问题描述】:
LinkedList 可以像这样使用升序或降序迭代器进行迭代:
LinkedList<Object> list = new LinkedList<Object>();
...
StringJoiner sJ1 = new StringJoiner(" ");
list.iterator().forEachRemaining(a -> sJ1.add(a.toString()));
System.out.println("averse: \n" + sJ1.toString());
StringJoiner sJ2 = new StringJoiner(" ");
list.descendingIterator().forEachRemaining(a -> sJ2.add(a.toString()));
System.out.println("reverse: \n" + sJ2.toString());
averse: Hello 2 Chocolate 10 reverse: 10 Chocolate 2 Hello
但 descendingIterator 不适用于 List 和 ArrayList。 是否有任何解决方法或在列表说明中,为什么 descendingIterator 在 List 中不存在?
问题类似于Can one do a for each loop in java in reverse order?。但所有答案都推荐临时解决方案或 3rd 方库。
这可能使用流流吗? (不幸的是,我的谷歌搜索只为流 Java 8 stream reverse order 提供了缺席标准反向)
正如我所提到的,我的问题与流有关,但是:
- 使用流只是一种选择,问题是关于java.util.Iterator 和java.util.List
- 对该问题的回答仅解决了部分情况,但显示缺乏方便的一般反向。如果我没有错过术语 List 是有序集合,则对 Comparable 项目进行排序以实现顺序会缩小范围。
【问题讨论】:
-
也许您只想使用
ArrayDeque而不是ArrayList? -
@Holger ArrayDeque 真的解决了我的问题。但是对我来说,需要这样一个解决方案看起来很尴尬。因为 ArrayDeque 似乎比降序 for 循环更稀有且鲜为人知的工具,并且它没有实现 List。
标签: java arraylist linked-list java-8