Pour chaque conversion de boucle For

Puis-je savoir comment convertir ce qui suit pour chaque boucle en boucle normale?

for (SortedMap.Entry entry : mapDefect.entrySet()) 

J’ai une variable de count comme sharepoint départ et la fin de la carte comme sharepoint fin. En conséquence, comment puis-je le convertir en boucle normale?

Vous dites que la tâche consiste à ignorer les premiers éléments de count et à traiter le rest.

Cela peut être fait avec une boucle “pour” ou une boucle “pour chaque”. Dans ce cas, je garderais ceci comme une boucle “pour chaque”:

 int i = 0; for (SortedMap.Entry entry : mapDefect.entrySet()) { if (i++ < count) continue; ... } 

La section 14.14.2 du JLS donne la traduction. Dans ce cas, ce serait grossièrement:

 for (Iterator> iterator = mapDefect.entrySet().iterator(); iterator.hasNext(); ) { SortedMap.Entry entry = iterator.next(); // ... } 

Vous pouvez également utiliser la classe Iterables Guava pour prendre une section du jeu sortingé:

 Iterable> section = Iterables.limit( Iterables.skip(mapDefect.entrySet(), start), end - start); for (SortedMap.Entry entry : section) { // ... } 

Ou si c’est juste du count (avec le commentaire de clarification):

 for (SortedMap.Entry entry : Iterables.skip(mapDefect.entrySet(), count)) { // ... } 

La méthode recommandée pour parcourir une carte consiste à utiliser un iterator ou une boucle for-each (qui utilise un iterator).

La conversion de votre boucle pour chaque boucle en boucle “normale” peut fonctionner dans votre cas, car vous utilisez des entiers comme clés de mappe:

 for (int i = 0; i < mapDefect.size(); i++) { String value = mapDefect.get(i) // do something with value } 

Mais notez que cela ne fonctionne que si vous utilisez des clés de carte comme vous utiliseriez des indices de tableau / liste (ce qui rend la carte inutile). Pour utiliser ce type de boucle, vous devez utiliser des nombres entiers positifs consécutifs comme touches de carte commençant à 0.