121 votes

Comment obtenir de la boucle de courant de l'index lors de l'utilisation d'un Itérateur?

Je suis en utilisant un Itérateur pour parcourir la collection et je veux de l'actuel indice de boucle.
toutes les idées de comment faire cela ?

142voto

Paul Points 191

J'ai eu la même question et a découvert à l'aide d'un ListIterator travaillé. Similaire au test ci-dessus:

List<String> list = Arrays.asList("zero", "one", "two");

ListIterator iter = list.listIterator();

while (iter.hasNext()) {
        System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());

}

Assurez-vous que vous appelez la nextIndex AVANT de vous apprendre la méthode next().

100voto

Chris Diver Points 8221

Utilisez votre propre variable et l'incrémenter dans la boucle.

31voto

Tom Clift Points 1057

Voici un moyen de le faire à l'aide de votre propre variable et de le garder concis:

List<String> list = Arrays.asList("zero", "one", "two");

int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
    String s = it.next();
    System.out.println(i + ": " + s);
}

De sortie (vous l'aurez deviné):

0: zero
1: one
2: two

L'avantage est que vous n'avez pas d'incrément de votre index à l'intérieur de la boucle (bien que vous devez être prudent de n'appeler qu'Itérateur#prochaine une fois par boucle - just do it en haut).

24voto

Robert Klemme Points 1244

Vous pouvez utiliser ListIterator à faire le décompte:

final List<String> list = Arrays.asList("zero", "one", "two");

for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
    final String s = it.next();
    System.out.println(i.previousIndex() + ": " + s);
}

Cheers

robert

13voto

Mateusz Dymczyk Points 4489

Ce genre de collection? Si c'est une mise en œuvre de la Liste de l'interface alors vous pouvez simplement utiliser (il.nextIndex()-1).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X