Como fazer para "clonar" um List<> passado por parâmetro, sem editar os itens da origem

6 respostas
ByIvo

Galera, eu estou fazendo um agenda com persistência em arquivos de texto.
As linhas de cada compromisso(Compromisso.java) vão estar em um List.
A minha solução seria criar outro List apenas para organizar como eu quero dentro do próprio List, e com um for, ir gravando em uma String.
Só tem um problema, eu não quero alterar a ordem do original, pois dentro do List Original eles vão estar em ordem de adicionamento.

Alguém sabe um método que possa fazer isso?
tentei fazer o .Clone(), mas não deu certo…

6 Respostas

J

Será que esse serve pra você? :?:

List<String> strs; ... List<String> newStrs = new ArrayList<String>(strs);

R

Tem uma classe legal da apache para fazer isso:

List<Compromisso> listCompromisso = new ArrayList<Compromisso>();

org.apache.commons.beanutils.PropertyUtils.copyProperties(listCompromisso, listaCompromissoOriginal);

Espero que ajude.

Abraço!

nel

Oi,

senão queres perder a ordem em que seus objetos foram adicionados a lista procure utilizar LinkedList. Essa lista garante que a ordem de inserção seja mantida, ao contrário de um ArrayList, por exemplo.

Ia me esquecendo, podes usar o método copy da classe Collections.

wfuertes

Voçê poderia criar um ArrayList e passar no construtor a sua List:

List<Compromisso> compromissos = new ArrayList<Compromisso>();
.
.
.
//pule a lista original => compromissos
.
.
.
//dai você cria uma nova lista e passa no construtor a original 
List<Compromisso> copiaDeCompromissos = new ArrayList<Compromisso>(compromissos);

É isso T+.

M

O “.clone” devia funcionar…vc setou os valores dentro de um while usando os getters & setters?coloca o código ai (:

wbdsjunior
List&lt;E&gt; copy = Collections.unmodifiableList(list);

não tenho acesso à documentação e não lembro se é impossível ordená-la.

Criado 20 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 6
Participantes 7