对于前向迭代:
for (int i=0; i<pathElements.length; 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中是否存在反向迭代开关?
(如果没有,你不认为JDK 8,9等包含这个功能会是一个令人兴奋的想法吗?)
答案 0 :(得分:10)
这基本上是不可能的,因为foreach循环基于Iterable
和Iterator
接口,而那些没有反向迭代的概念。
答案 1 :(得分:7)
使用番石榴:
for (T elem : Lists.reverse(Arrays.asList(array))) {
...
}
以列表的形式迭代数组的反向视图。 (因此,只有不变的开销,而且你不会改变底层数组。)
答案 2 :(得分:5)
(如果没有,你认为这不是一个令人兴奋的想法JDK 8,9, 等,包括这个功能?)
不确定我是否看到此功能的价值。
现在,您只需在使用Collections.reverse
转换为列表的数组副本上使用Arrays.asList
并迭代它。
答案 3 :(得分:0)
不,没有。你得到的最接近的是首先反转阵列。
ArrayUtils.reverse(array);
for (Item x : array){}
答案 4 :(得分:-1)
如果pathElements是你的自定义类,你可以通过实现Iterable来定义它应该如何迭代,否则你只需简单地封装pathElements并覆盖Iterable实现方法。
你也可以做这样的事情并覆盖Iterable接口方法:
public class pathElementsReversed extends pathElements {}
你可以像这样使用每个人:
foreach (pathElement p : (pathElementsReversed) pathElements) {...}