Java反向foreach

时间:2012-02-17 15:49:59

标签: java

  

可能重复:
  Can one do a for each loop in java in reverse order?

对于前向迭代:

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等包含这个功能会是一个令人兴奋的想法吗?)

5 个答案:

答案 0 :(得分:10)

这基本上是不可能的,因为foreach循环基于IterableIterator接口,而那些没有反向迭代的概念。

答案 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) {...}