21
mar.
2013
mar.
2013
Astuce : itération inverse
Java / JEE ›
Articles
|
Par Olivier Croisier
Une petite astuce en passant : comment parcourir une liste en sens inverse, à l'aide d'un itérateur ?
En utilisant un ListIterator, qui dispose de méthodes hasPrevious() et previous() :
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5); ListIterator<Integer> it = nums.listIterator(nums.size()); while(it.hasPrevious()) { Integer num = it.previous(); System.out.println(num); }
5 4 3 2 1
Ca peut toujours servir !


Commentaires
Interesting!
Du coup, on peut assez facilement utiliser le foreach en backward:
List<Integer> nums = asList(1, 2, 3, 4, 5); for (Integer num : ReverseIterable.reverse(nums)) { System.out.println(num); }Avec:
public class ReverseIterable<T> implements Iterable<T> {
public static <T> Iterable<T> reverse(List<T> list) { return new ReverseIterable<T>(list); }public ReverseIterable(List<T> list) { this.list = list; }@Override public Iterator<T> iterator() { final ListIterator<T> iterator = list.listIterator(list.size());return new Iterator<T>() { @Override public boolean hasNext() { return iterator.hasPrevious(); }@Override public T next() { return iterator.previous(); }@Override public void remove() { iterator.remove(); } }; }}
Oui, ta solution ressemble beaucoup à celle de Guava : http://guava-libraries.googlecode.c...)