本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Can one do a for each loop in java in reverse order?
对于前向迭代:
for (int i=0; i
T pathElem = pathElements[i];
.......
}
我可以将其编码为foreach:
for(T pathElem : pathElements){
.......
}
是否有开关可以使foreach反向迭代?
for (int i=pathElements.length-1; i>=0; i--){
T pathElem = pathElements[i];
.......
}
foreach中是否有反向迭代开关?
(如果没有,你不觉得这将是一个令人兴奋的想法,JDK8,9,等等,包括这个功能吗?)
stackoverflow.com/questions/1098117/
从根本上讲这是不可能的,因为foreach循环是基于Iterable和Iterator接口的,而这些接口没有反向迭代的概念。
无限序列就是一个很好的例子。 由于不存在"最后一个"元素,因此从数学上讲不可能颠倒顺序。
我看到了此链接,并认为我们可以做到这一点
@saman:您可以对已排序的事物(例如TreeSet)或具有索引概念(例如List或数组)进行操作,并且可以肯定,这些是我们通常使用for循环的大多数事情 开启,但对于常规Iterable仍然不可能。
使用番石榴:
for (T elem : Lists.reverse(Arrays.asList(array))) {
...
}
将数组的反向视图作为列表进行迭代。 (因此,只有固定的开销,并且您无需更改基础数组。)
(If not, don't you think it would be an exciting idea that JDK 8, 9,
etc, includes this feature?)
不确定我是否在这种功能中看到了值。
现在,您可以简单地在已使用Arrays.asList转换为列表的数组副本上使用Collections.reverse并对其进行迭代。
好吧,那里有价值。 而不是所有这些多余的行和可能的处理,您可以(理想情况下)将一个单词添加到foreach行中。
或至少内置到JDK的ReverseIterator,这样您就不必每次都自己滚动或使用第三者了。
不,那里没有。您将获得的最接近的结果是首先反转阵列。
ArrayUtils.reverse(array);
for (Item x : array){}
如果pathElements是您的自定义类,则可以通过实现Iterable定义如何对其进行迭代,否则,您可以简单地封装pathElements并覆盖Iterable实现方法。
您还可以进行如下操作并覆盖Iterable接口方法:
public class pathElementsReversed extends pathElements {}
您可以像这样使用每个:
foreach (pathElement p : (pathElementsReversed) pathElements) {...}