[RESOLVIDO] Erro com Collections.copy

3 respostas
CrOnNoS
Alguém sabe me dizer o que eu deveria fazer aqui ?:
public void compararColunas(List<ColunaMetaData> primeiraLista,
			List<ColunaMetaData> segundaLista) {

		List<ColunaMetaData> copiaDaPrimeiraLista = new ArrayList<ColunaMetaData>(
				primeiraLista.size());
		List<ColunaMetaData> copiaDaSegundaLista = new ArrayList<ColunaMetaData>(
				segundaLista.size());

		Collections.copy(copiaDaPrimeiraLista, primeiraLista);
		Collections.copy(copiaDaSegundaLista, segundaLista);
	}

Estava com esse erro inicialmente: Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:531)
Então adicionei na construção das listas cópia, o argumento primeiraLista.size() e segundaLista.size() mas continua dando esse mesmo erro.
Alguém sabe me dizer o problema ?

3 Respostas

ViniGodoy

The destination list must be at least as long as the source list.

Ele não quer dizer com isso que ambas as listas devam ter a mesma capacidade. Mas que elas tenham que ter o mesmo número de elementos. Idiota, eu sei, mas é assim. Já foi aberto um bug contra isso, que foi inclusive fechado.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6350752

ViniGodoy

Ah sim, para copiar as listas, é ainda mais fácil. Simplesmente faça:

List<ColunaMetaData> copiaDaPrimeiraLista = new ArrayList<ColunaMetaData>(primeiraLista); List<ColunaMetaData> copiaDaSegundaLista = new ArrayList<ColunaMetaData>(segundaLista);

A maior parte das collections baseadas em List e Set aceitam um construtor de cópia.

CrOnNoS

Ok, farei assim, obrigado.

Criado 6 de outubro de 2009
Ultima resposta 6 de out. de 2009
Respostas 3
Participantes 2