J'ai un problème où j'essaye de parcourir une arraylist qui stocke des objets de restaurant mais la boucle passe seulement par trois des cinq éléments.boucle ne pas itérateur à travers arraylist
J'ai créé une méthode d'essai pour illustrer:
public void testLoop() {
ArrayList<Eatery> test = new ArrayList<Eatery>();
test = eateriesListDefault;
for(Eatery e : test) {
MyLog.e(TAG, "Name: " + e.getName());
}
for (int i = 0; i < eateriesListDefault.size(); i++) {
MyLog.e(TAG, "Name " + test.get(i).getName());
test.remove(i);
}
for(Eatery e : test) {
MyLog.e(TAG, "Name " + e.getName());
}
}
Ici essai aura 5 objets Eatery en elle. La première boucle imprime avec succès 5 des 5 noms. La deuxième boucle supprime seulement 3 des restaurants et donc la dernière boucle imprime deux noms.
J'ai essayé d'utiliser
for(Eatery e : eateriesListDefault) {
MyLog.e(TAG, "Name: " + e.getName());
test.remove(e);
}
en place de la deuxième boucle, mais je reçois une erreur d'accès simultané.
Est-ce que quelqu'un sait ce que je fais mal?
Tout d'abord, vous ne devriez pas utilisez une boucle 'foreach' lorsque vous essayez de retirer des valeurs de la collection. C'est la cause de votre erreur d'accès concurrent. Voir [cette page] (http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html). Pouvez-vous également expliquer pourquoi vous lancez un appel 'new ArrayList' uniquement pour créer une affectation sur la ligne suivante? – Grambot
Est-il possible pour nous de voir à quoi ressembleront les restaurantsListDefault?Peut-être qu'au lieu de "pour (Eatery e: test)" comme la première boucle, vous devriez essayer et imiter votre 2ème boucle afin que vous puissiez comparer des pommes aux pommes. J'essaie juste d'exclure tout problème d'indexation. – dispake