我需要使用Java以相反的顺序遍历列表.
因此,它向前的方向是:
for(String string: stringList){
//...do something
}
有没有什么方法可以使用for each语法以相反的顺序迭代string List?
为了清楚起见:我知道如何以逆序迭代列表,但我想知道(出于好奇心)如何以for each样式进行迭代.
我需要使用Java以相反的顺序遍历列表.
因此,它向前的方向是:
for(String string: stringList){
//...do something
}
有没有什么方法可以使用for each语法以相反的顺序迭代string List?
为了清楚起见:我知道如何以逆序迭代列表,但我想知道(出于好奇心)如何以for each样式进行迭代.
Collection .reverse方法实际上返回一个新列表,其中原始列表的元素以相反的顺序复制到该列表中,因此相对于原始列表的大小,这具有O(n)性能.
作为一种更有效的解决方案,您可以编写一个修饰器,将列表的反向视图表示为Iterable.您的修饰器返回的迭代器将使用修饰列表的ListIterator以相反的顺序遍历元素.
例如:
public class Reversed<T> implements Iterable<T> {
private final List<T> original;
public Reversed(List<T> original) {
this.original = original;
}
public Iterator<T> iterator() {
final ListIterator<T> i = original.listIterator(original.size());
return new Iterator<T>() {
public boolean hasNext() { return i.hasPrevious(); }
public T next() { return i.previous(); }
public void remove() { i.remove(); }
};
}
public static <T> Reversed<T> reversed(List<T> original) {
return new Reversed<T>(original);
}
}
你会像这样使用它:
import static Reversed.reversed;
...
List<String> someStrings = getSomeStrings();
for (String s : reversed(someStrings)) {
doSomethingWith(s);
}