Loop para excluir elementos na coleção de lista

Cenário de uso: Há uma coleção que precisa filtrar seus elementos e remover os elementos que não atendem às condições.

Assim como na coleção acima, quero deletar todas as strings "Zhang San". A primeira coisa que vem à mente é fazer um loop e fazer julgamentos condicionais.

Mas ao executar o código, o último "Zhang San" não é excluído, por quê?

Acontece que quando o loop for é executado, o tamanho de i e a coleção de listas mudam dinamicamente, i aumenta e list.size() diminui.

Isso faz com que a coleção termine a travessia sem passar para o último elemento durante a travessia.

Aqui estão algumas maneiras de evitar esse problema:

Método 1: Use o método removeIf. removeIf coletará os subscritos dos elementos que atendem às condições e os excluirá.

Método 2: Use o flashback para excluir. list.size() é usado apenas ao definir o valor inicial de i, portanto, não será afetado.

Método 3: Crie uma nova coleção diretamente e execute operações de passagem na nova coleção.

Método 4: Use o iterador da coleção de listas. Depois que o iterador for excluído, ele atualizará automaticamente o iterador e a coleção.

Método 5: Use stream para filtrar.

Quanto ao uso do forEach, ele também relatará um erro. O motivo pode ser visto diretamente no código-fonte. O forEach usa um loop for aprimorado para passagem, portanto, também relatará um erro.

Acho que você gosta

Origin blog.csdn.net/weixin_47025878/article/details/129341223
Recomendado
Clasificación