Adiconar elemento na lista(ArrayList), sendo que a lista é utilizada por uma for

4 respostas
badjceo

É possível adicionar um elemento num ArrayList enquanto ele é utilizado por um for??

Exemplo

for(Contato contato : listaContatos)
{	
   listaContatosVip = contato;
   getAmigosContato(listaContatos, contato);
}
public void getAmigosContatos(List<Contato> listaContatos, Contato contato)
{
   if(contato.temAmigos())
         listaContatos.addAll(contato.getListaAmigos);
}

tentei fazer isso mas um exceção ConcurrentModificationException foi lançada!!

Valew!

4 Respostas

A

ok

R

badjceo,

Isso que você quer fazer realmente não tem jeito porque geraria recursão infinita.
Você tem que colocar uma variável auxiliar para poder receber os contatos dentro do for.

Não testei o código deve ter erro mas espero que dê pra pegar a idéia.

<code>

List<Contato> novalistaContatos

for(Contato contato : listaContatos)  {
novalistaContatos.addAll(getAmigosContato(listaContatos, contato));

}
</code>

<code>

public List<Contato> getAmigosContatos(List<Contato> listaContatos, Contato contato)

{

return contato.getListaAmigos();

}

</code>
peczenyj

Humm,… é uma …concurrentModificationException ?

Use o remove do iterator:

http://www.guj.com.br/posts/list/97034.java

victor.godinho

Troque de foreach para for normal:

de:

for ( Contato contato : listaContatos ) {

para:

Contato contato = null; for ( int i = 0; i < listaContatos.size() && (contato = listaContatos.get(i)) != null; i++) {

Já vai funcionar…

Só tome cuidado, como o badjceo disse, se você adicionar em TODAS as iterações, o loop ficará infinito… mas se você não for colocar em todas (e ter a plena certeza disso), é só fazer a alteração que eu disse.

Falows.

Criado 7 de agosto de 2008
Ultima resposta 7 de ago. de 2008
Respostas 4
Participantes 5