Acrescentar objeto em uma collection - java.util.ConcurrentModificationException
4 respostas
Marques
Lista ,
Percorro uma collection e dependendo de uma condição preciso adicionar um objeto à mesma. Porém ao tentar fazê-lo recebo um java.util.ConcurrentModificationException.
Como resolver essa parada?
Muito obrigado,
Marques
for(Iteratorit=totalAssociados.iterator();it.hasNext();){AssociadoDTOregAssociado=(AssociadoDTO)it.next();if(condição){// recupero objeto e pereciso adcicionar à Collection totalAssociados// porém recebo o erro java.util.ConcurrentModificationExceptiontotalAssociados.add(objeto)}}
como vc ta dentro de uma iteração dessa collection, vc não pode acrescentar nem retirar elementos dela, q vai dar erro. Tente criar uma nova collection e adicionar nela os elementos da collection q vc quer + os novos elementos q vao ser adicionados na condição
K
K.S.V
Ola, estava tendo esse mesmo problema mas ter de criar outra collection para algo simples assim não achei interessante.
Coloque um break apos a alteração para que o loop do interator se interrompa no meu não aparece mais erro. Veja:
No meu caso estava dando erro porque eu queria excluir um profissional da collection, toda e qualquer alteração feita no loop dava erro,
com o break logo que encontrar o profissional a ser excluido ele o remove e para e entao sai do interator assim não da erro, pra mim funcionou tente
usar a ideia, espero ter ajudado abraços!
Lavieri
ConcurrentLinkedQueue<String> collection = new ConcurrentLinkedQueue<String>();
ConcurrentSkipListSet<String> set = new ConcurrentSkipListSet<String>();
por ordem de inserção use a 1° ela é uma collection e aceita itens repetidas...
a segunda não aceita repetição, porem não tem ordem perfeitamente definida...
as duas aceitam modificações concorrentes....
de uma olhada na API java.util.concurrent ... um exemplo que funciona...
publicstaticvoidmain(String[]args){ConcurrentLinkedQueue<String>collection=newConcurrentLinkedQueue<String>();collection.add("haha");collection.add("putz");collection.add("concorrente");collection.add("nada");collection.add("haha");for(Iterator<String>itr=collection.iterator();itr.hasNext();){if(itr.next().equals("concorrente"))collection.add("eureca! deu certo");}for(Strings:collection)System.out.println(s);}