Scénario d'utilisation : une collection doit filtrer ses éléments et supprimer les éléments qui ne remplissent pas les conditions.
Tout comme la collection ci-dessus, je souhaite supprimer toutes les chaînes "Zhang San". La première chose qui vient à l'esprit est de boucler et de porter des jugements conditionnels.
Mais lors de l'exécution du code, le dernier "Zhang San" n'est pas supprimé, pourquoi ?
Il s'avère que lorsque la boucle for est exécutée, la taille de i et la collection de listes changent dynamiquement, i augmente et list.size() diminue.
Cela amène la collection à terminer le parcours sans passer par le dernier élément lors du parcours.
Voici quelques façons d'éviter ce problème :
Méthode 1 : Utilisez la méthode removeIf. removeIf collectera les indices des éléments qui remplissent les conditions, puis les supprimera.
Méthode 2 : Utilisez le flashback pour supprimer. list.size() n'est utilisé que lors de la définition de la valeur initiale de i, il ne sera donc pas affecté.
Méthode 3 : créez directement une nouvelle collection et effectuez des opérations de parcours sur la nouvelle collection.
Méthode 4 : Utiliser l'itérateur de la collection de liste Une fois l'itérateur supprimé, il mettra automatiquement à jour l'itérateur et mettra à jour la collection.
Méthode 5 : utilisez le flux pour filtrer.
Quant à l'utilisation de forEach, il signalera également une erreur. La raison peut être vue directement à partir du code source. forEach utilise une boucle for améliorée pour la traversée, il signalera donc également une erreur.