Boucle pour supprimer des éléments dans la collection de liste

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.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_47025878/article/details/129341223
conseillé
Classement