Existe-t-il un moyen élégant d’ignorer la première itération dans une boucle Java5?
Exemple de pseudo-code:
for ( Car car : cars ) { //skip if first, do work for rest . . }
Je ne dirais pas que c’est élégant, mais peut-être mieux que d’utiliser un “premier” booléen:
for ( Car car : cars.subList( 1, cars.size() ) ) { . . }
Autre que cela, probablement aucune méthode élégante.
Avec la nouvelle API Java 8 Stream, elle devient très élégante. Utilisez simplement la méthode skip()
:
cars.stream().skip(1) // and then operations on remaining cars
Utilisez Guava Iterables.skip()
.
Quelque chose comme:
for ( Car car : Iterables.skip(cars, 1) ) { // 1st element will be skipped }
( Je l’ai eu à la fin de la réponse de msandiford et je voulais en faire une réponse autonome)
for (Car car : cars) { if (car == cars[0]) continue; ... }
Assez élégant pour moi.
Le code de SeanA a une toute petite erreur: le second argument de la sous-liste est traité comme un index exclusif, nous pouvons donc simplement écrire
for (Car car : cars.subList(1, cars.size()) { ... }
(Je ne semble pas être en mesure de commenter les réponses, d’où la nouvelle réponse. Ai-je besoin d’une certaine réputation pour le faire?)
Je suis arrivé un peu tard à cela, mais vous pourriez utiliser une méthode d’assistance, quelque chose comme:
public static Iterable skipFirst(final Iterable c) { return new Iterable () { @Override public Iterator iterator() { Iterator i = c.iterator(); i.next(); return i; } }; }
Et l’utiliser comme ceci:
public static void main(Ssortingng[] args) { Collection c = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); for (Integer n : skipFirst(c)) { System.out.println(n); } }
Généraliser pour sauter “n” est laissé comme un exercice pour le lecteur 🙂
EDIT : En regardant de plus près, je vois que Guava a un Iterables.skip(...)
ici .
Je ne suis pas une personne java mais peux-tu utiliser:
for ( Car car : cars.tail() )
de java.util via Groovy JDK
Élégant? Pas vraiment. Vous devez vérifier / définir un booléen.
La boucle for-each est, à toutes fins pratiques, une syntaxe sophistiquée pour utiliser un iterator. Il est préférable d’utiliser un iterator et d’avancer avant de commencer votre boucle.
Pas si élégant mais travaille avec des iterators
Iterator rows = array.iterator(); if (rows.hasNext()){ rows.next(); } for (; rows.hasNext();) { XXXXX row = (XXXXX) rows.next(); }
Cela pourrait ne pas être élégant, mais on pourrait initialiser une variable entière en dehors de la boucle for et l’incrémenter à chaque itération de la boucle. Votre programme ne sera exécuté que si le compteur est supérieur à 0.
int counter = 0; for ( Car car : cars ) { //skip if first, do work for rest if(counter>0){ //do something } counter++; }