尝试实现一些reduceRight功能。 为了提高性能,最好先从右到左进行迭代,而无需先反转所有内容,然后再从左到右进行。通常,我们这样做:
Iteratable iterable ...;
Iterator iterator = iterable.iterator();
iterator.next();
但是我正在寻找类似的东西:
Iteratable iterable ...;
Iterator iterator = iterable.reverseIterator();
iterator.next();
我看到了以下解决方案:Iterating through a list in reverse order in java
当前接受的答案表明这可行:
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());
}
有人知道仅手握Iterable
时如何实现反向迭代吗?我手边没有ArrayList
或列表,手边没有Iterable
。我想我可以将Iterable转换为ArrayList,反转该列表,然后获得一个迭代器,但这并不好玩:)
答案 0 :(得分:2)
简单的答案:用通用的表现方式是不可能的。
迭代器的本质是使您一个方向,而不是两个方向。并想象一个单链表。那东西真的只有“一个方向”!
因此如何解决可迭代事物的问题确实需要您查看确切的实现。 如果没有这种可能性,则必须使用中间数据结构在反转之前获取所有条目。
答案 1 :(得分:1)
您必须在原始npm install geckodriver@1.14
上进行一次迭代,以构造一个反转的Iterator
(假设原始Iterator
是有限的)。
例如:
Iterator
答案 2 :(得分:1)
如果您手头有一个Iterable
(如您在问题中所写),那么有人会为您提供。我建议要求提供者提供一个支持反向迭代的Iterable
。