可以在java中以相反的顺序为每个循环做一个吗?
我需要使用Java以相反的顺序运行列表。
因此,这将向前推进:
for(String string: stringList){
//...do something
}
有没有办法使用 for 每种语法以相反的顺序迭代 stringList?
为了清楚起见:我知道如何以相反的顺序迭代列表,但想知道(出于好奇)如何在每种样式中执行此操作。
我需要使用Java以相反的顺序运行列表。
因此,这将向前推进:
for(String string: stringList){
//...do something
}
有没有办法使用 for 每种语法以相反的顺序迭代 stringList?
为了清楚起见:我知道如何以相反的顺序迭代列表,但想知道(出于好奇)如何在每种样式中执行此操作。
Collections.reverse 方法实际上返回一个新列表,其中原始列表的元素以相反的顺序复制到其中,因此,相对于原始列表的大小,这具有 O(n) 性能。
作为更有效的解决方案,您可以编写一个装饰器,将 List 的反向视图显示为可迭代对象。装饰器返回的迭代器将使用修饰列表的 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);
}
对于列表,您可以使用Google番石榴库:
for (String item : Lists.reverse(stringList))
{
// ...
}
请注意,Lists.reverse
不会反转整个集合,也不会执行类似操作 - 它只是允许迭代和随机访问,顺序相反。这比先反转集合更有效。
要反转任意可迭代,您必须全部读取它,然后向后“重放”它。
(如果你还没有使用它,我强烈建议你看看番石榴。这是很棒的东西。