Problema ao copiar elementos de ArrayList para outra ArrayList [Resolvido]

Ola pessoal,

Estou com uma duvida, gostaria de saber o porque ocorre a copia indevida de valores em listas completamente distintas.
Em seguida, o meu codigo e a explicação do que exatamente ocorre.

[code] public DualListModel pickListAtividades() {

	List<Atividade> target = getAtividades();
            List<Atividade> source = getAtividades();
	
	DualListModel<Atividade> dualAtividades;
	
	//link of Task (selected) and Activity on Task map,
	//     working like a memory for activities changes on pickList (primefaces), deleted and added
	if (mapTarefa.containsKey(tarefa)){
		dualAtividades = mapTarefa.get(tarefa);
		return dualAtividades;
	}else{
		Collection<DualListModel<Atividade>> coll = mapTarefa.values();
		List<DualListModel<Atividade>> listDualList = new ArrayList<DualListModel<Tarefa>>(coll);
		for (DualListModel<Atividade> dualListModel : listDualList) {
			List<Atividade> _target = dualListModel.getTarget();
			for(Atividade ac : _target) {
				target.add(ac);
			}
                            List<Atividade> _source = dualListModel.getSource();
                            for(Atividade ac : _source){
                                    source.add(ac);
                            }
		}
		dualAtividades = new DualListModel<Atividades>(source,target);
		return dualAtividades;
	}
}[/code]

Bem, o resultado do topico é visto nessa linha do codigo:

dualAtividades= new DualListModel<Atividades>(source,target);

O que acontece, bizarramente, é a copia indevida de valores de uma lista para a outra, sendo que não estou realizando nenhuma operação entre essas listas.
Apos debugar o codigo percebi que a cada iteração do primeiro for (1) ela realiza a copia dos elementos “adicionados” na lista target para a lista dualListModel.getSource()

b[/b]

for(Atividade ac : _target) { target.add(ac); }

Quando é feito a copia dos elementos da lista _source para a lista source, é realizado a copia dos mesmos valores que tem a lista _target.

Alguém poderia me explicar o que ocorre e o porque ?

Muito obrigado.

(espero que a pergunta tenha ficado clara, qualquer duvida so perguntar)

Cara, nunca utilizei DualListModel, mas me parece q no início do código vc está atribuindo a mesma lista para “target” e para “source”, essa parte não está errada?

List&lt;Atividade&gt; target = getAtividades(); // target e source possuem os mesmos valores
List&lt;Atividade&gt; source = getAtividades();

Então fabiocortolan,

Olha so…

getAtividades() ira retornar uma lista.

public List<Activite> getActivites() { if (activites == null ){ activites = new ArrayList<Activite>(); } return activites; }

Então, então creio eu que não ha sentido dar problema ai.

O problema é na DualListModel, pois no mesmo momento que eu copio os elementos da lista _target para target, os elementos são copiados de _target para _source (isso eu vi durante o debug na DualListModel).

Acho q vc mesmo já respondeu seu problema! Qdo vc chama “getAtividades()”, vc verifica se “activites” é null, como essa variável está na mesma instância dos outros métodos q vc postou a primeiva vez ela é null, já na segunda ela possui a mesma instância, nesse caso target e source possuem a mesma instância da lista “activites”, nesse caso qdo vc modifica target, source será modificado tbm e vice versa. Vou comentar os códigos para tentar esclarecer melhor:

public List&lt;Activite&gt; getActivites() {  
    if (activites == null ){  
        activites = new ArrayList&lt;Activite&gt;(); // código executado em "target"
    }  
    
    return activites; // código executado em "source" - retorna a mesma instância da lista de target
}

// ...
List&lt;Atividade&gt; target = getAtividades(); // Aki ele entra dentro do if, já que "activites" é null
List&lt;Atividade&gt; source = getAtividades(); // Aki ele pegou a mesma lista de cima, já  "activites" não é mais null

Rapaz, e não é que funcionou mesmo ?

Inicializei ambas as listas com o new ArrayList(); e funcionou.

O sistema se tornou grande e não prestei atenção a esse detalhe quando voltei pra essa parte do desenvolvimento.

Muito obrigado por ter feito atenção à isso !

E qual o problema com a DualListModel ?

[quote=andrielc]

E qual o problema com a DualListModel ?[/quote]

Não sei se existe algum problema em usar DualListModel, até hj eu não tinha visto nada a respeito dessa API…

Ah, ok.

Utilizei ela para reduzir a quantidade de variavel e se tornou util para o que eu realizei, como a operação de memoria.

Obrigado.