[quote=danilloh]Mais uma opção…
for (Iterator<Pessoa> iterator = getListaPessoa().iterator(); iterator
.hasNext();) {
if (iterator.next().isSelecionado()) {
iterator.remove();
}
}
[/quote]
Funcionou delicia !!! Parabéns… Achei essa aqui mais elegante. abs…
Valeu galera!
Eu estava com o mesmo problema e resolvi com o Iterator.
jhuka
Julho 8, 2013, 2:22am
#23
O tempo passa e os iniciantes com os mesmos problemas …
Tava com o problema igual, mas no meu caso eu nao queria remover e sim adiconar elementos num ArrayList.
Tinha um while que era um mainloop de um jogo teste e adicionava elementos num ArrayList de tempos em tempos e chamava o repaint();
no paint eu tinha um for que percorria o ArrayList e desenhava todos os elementos.
Resolvi com
CopyOnWriteArrayList<>();
ficou assim:
[code]while(emJogo){
cont++;
//de tempos em tempos adiciona novo bandido
if(cont > 250){
Bandido2 bandido = new Bandido2();
bandido.setisVisible(true);
bandido.setPosx(1100);
inimigo.add(bandido);
cont = 0;
}
// atualiza movimento continuo dos bandidos para esquerda
for (Iterator<Bandido2> iterator = inimigo.iterator(); iterator.hasNext();) {
Bandido2 bandido = (Bandido2) iterator.next();
bandido.andarTras();
}
repaint();
}
}[/code]
o paint ficou assim:
[code]
public void paint(Graphics g){
//pega copia
Graphics2D g2d = (Graphics2D) g.create();
//repinta fundo
g2d.drawImage(fundo, null, 0, 0);
//repinta todos os inimigos inclusive o ultimo acrescentado
for (Iterator<Bandido2> iterator = inimigo.iterator(); iterator.hasNext();) {
Bandido2 bandido = (Bandido2) iterator.next();
g2d.drawImage(bandido.getAvatar() ,bandido.getPosx(), 20,null);
}
//dicarta copia
g2d.dispose();
}[/code]
Não é o melhor codigo do mundo, mas to colocando aqui pq era o mesmo problema resovido de forma diferente.
Outra solução possível é criar uma lista do que será adicionado, e só copiar o conteúdo dessa lista para a principal no início do próximo loop. Assim vc também garante que um objeto não participará só de “meio” GameLoop.