Sometimes we want to iterate in reverse order over a list in Java – without (re)sorting the list. Code example:
for (T item : backwards(list)) {
// do something
}
Here is a backwards() method that does this for you (maybe put this code into a util class and use a static import):
public static <T> Iterable<T> backwards(final List<T> list) {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return backwardsIterator(list);
}
};
}
private static <T> Iterator<T> backwardsIterator(List<T> list) {
final ListIterator<T> iter = list.listIterator(list.size());
return new Iterator<T>() {
@Override
public boolean hasNext() {
return iter.hasPrevious();
}
@Override
public T next() {
return iter.previous();
}
@Override
public void remove() {
iter.remove();
}
};
}


