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

É 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!

ok

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>

Humm,… é uma …concurrentModificationException ?

Use o remove do iterator:

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

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.