Problema com FORECH, ARRAYLIST, REMOVER

3 respostas
analyser

Olá galera estou com um problema, tenho um ArrayList que armazena referências aos objetos de uma classe javabeans, onde tenho um nome cadastrado em cada objeto.

Bem quando faço o laço FORECH e excluo um nome dado como parametro ele remove apenas o primeiro que achar na lista, depois sai do foreach.

Bem, como faço para ele não sair, remover todos os nomes que dei como que é igual ao que passei como parametro??

Abraços

3 Respostas

thiago.correa

Bom, sem o código fica difícil, mas eu diria que você está usando o comando ‘break’ para sair do laço, se você removê-lo deve sanar o seu problema

ViniGodoy

Provavelmente o seu foreach está lançando uma ConcurrentModificationException.

O fato é que você não pode excluir de uma lista um elemento, enquanto está percorrendo essa mesma lista num for each, ou uma exceção será lançada.

Para contornar esse problema, use um Iterator. Assim, ao invés de:

String removida = new String("Vinicius")

for (String palavra : palavras) {
   if (removida.equals(palavra)) {
       palavras.remove(palavra); //Vai lançar ConcurrentModificationException
   }
}

Faça:

String removida = new String("Vinicius")

Iterator<String> it = palavras.iterator();

while (it.hasNext()) {
   String palavra = it.next();
   if (removida.equals(palavra)) {
      it.remove(); 
   }
}

O que acontece é que o for each cria um iterador implicitamente. E quando você chama remove, você está removendo um elemento da lista, sem que o iterador tome conhecimento. Quando o iterador percebe isso (após o primeiro objeto já ter sido removido), ele lança a exceção.

S

Estava com um problema parecido aqui no trabalho.
Sua dica foi muito útil Vinicius.

Obrigado.

Criado 24 de setembro de 2007
Ultima resposta 28 de mar. de 2008
Respostas 3
Participantes 4