Preciso clonar uma coleção para poder trabalhar com ela e remover itens de uma das listas sem prejudicar a outra e to tentando clonar a coleção da seguinte maneira:
privateHSSFWorkbookgerarRelatorio(Listrelatorio){ListlistaDoidia=newArrayList();Collections.copy(listaDoidia,relatorio);// resto da implementação}
Collections.copy é mais ou menos como se fosse um daqueles loops que copiam arrays, e implementado mais ou menos como se fosse isso. Portanto, ele não “aumenta” o tamanho da Collection destino.
Você já ouviu falar em “shallow copy” (cópia rasa) e “deep copy” (cópia profunda)? O que mostrei faz uma “shallow copy”, ou seja, copia apenas as referências aos objetos contidos na coleção “relatorio”. Ele não clona os objetos em si. Se precisar de uma “deep copy” aí é por sua conta (um dos problemas de uma “deep copy” é que pode ser que os objetos contidos na coleção “relatorio” podem não ser todos clonáveis
P
padcoe
Entendi, eu precisava mesmo clonar pq a listaDoidia seria pra comparar os registros que pertencem a um mesmo objeto pra poder montar no POI e o que fosse igual, eu já iria removendo da outra lista.
Este List listaDoidia = new ArrayList(relatorio);, não funcionou pq ele criou a listaDoidia de maneira vazia e o relatorio, está totalmente preenchido.
Tem algo que eu esteja fazendo de errado?
ps.: to usando java 1.4
Obrigado
P
padcoe
thingol:
Você já ouviu falar em “shallow copy” (cópia rasa) e “deep copy” (cópia profunda)? O que mostrei faz uma “shallow copy”, ou seja, copia apenas as referências aos objetos contidos na coleção “relatorio”. Ele não clona os objetos em si. Se precisar de uma “deep copy” aí é por sua conta (um dos problemas de uma “deep copy” é que pode ser que os objetos contidos na coleção “relatorio” podem não ser todos clonáveis
Entendi, mas se eu fizer uma cópia rasa e deletar um objeto da coleção “relatorio”, ele será removida também da coleção “listaDoidia”?
Obnrigado
P
padcoe
Consegui clonar…eu estava fazendo errado pq eu tinha removido o Collections.copy() :oops:
Valeu pelas dicas sobre os tipos de cópia
Obrigado
T
thingol
Não. Vamos dar um exemplo mais simples.
Digamos que você tenha dois arraylists, “relatorio” e “listadodia”.
Cara, eu já precisei de algo semelhante e uma solucao que adotei foi clonar os objetos que eu tinha de uma lista antiga e adicionar os objetos clonados em uma nova lista. Imagine agora que tenhamos uma classe carro e uma lista de carros que queremos copiar, sendo assim: