Ordenaçao de list de Collection

6 respostas
thiago.limma

Galera,

queria saber se alguém pode me ajudar...

Fiz um método aqui para comprar um List de Collection e estou tendo um erro na hora que dou Collections.sort ( minha lista)

Dei uma olhada e parece que tenho que implementar o método Comparable...

Alguém pode me exmplicar como ficaria esse Comparable?

Meu método:

/**
	 * Método responsável por ordenar uma lista em ordem alfabética
	 * @param listaParaOrdenacao Lista que deseja-se fazer a ordenação 
	 * @return listaOrdenada
	 */
	public List<String> ordenarElementos(Collection<String> listaParaOrdenacao) {  
		    List<String> listaOrdenada = new ArrayList<String>(listaParaOrdenacao); //Faz a cópia 
		    try{
		    Collections.sort(listaOrdenada); // Aqui tenho erro
		    }
		    catch(Exception e){
		    	e.printStackTrace();
		    }
		    return listaOrdenada;  
		 }

erro:

cannot be cast to java.lang.Comparable

6 Respostas

ViniGodoy

É com String mesmo que você está trabalhando?

A mensagem de erro também está parecendo estar pela metade… Ele não diz que classe não pode ser cast para Comparable?

ViniGodoy

Ah, dá uma lida aqui também:
http://www.guj.com.br/posts/list/45985.java

thiago.limma

ViniGodoy:
Ah, dá uma lida aqui também:
http://www.guj.com.br/posts/list/45985.java

na verdade tenho que implementar o método Compare

@Override
		    	public int compare(VOGenerico o1, VOGenerico o2) {
		    		
		    		return 0;
		    	}

o que eu faço nesse metodo??

vlweww
ViniGodoy

Você diz ao Java como um VOGenerico pode ser comparado com outro VOGenerico.

Para ordenar, é necessário ser capaz de dizer se um objeto é menor, maior ou igual a outro. Retorne um valor < 0 no primeiro caso, > 0 no segundo ou 0, no teceiro.

Por exemplo, esse aqui ordenaria pelo toString():

public void compare(VOGenerico vo1, VOGenerico vo2) { return vo1.toString().compareTo(vo2); }

Esse aqui por id:

public void compare(VOGenerico vo1, VOGenerico vo2) { if (vo1.getId() &lt; vo2.getId()) return -1; if (vo1.getId() &gt; vo2.getId()) return 1; return 0; }

Considere a possibilidade de usar um Comparator ao invés de implementar a interface Comparable. A menos que exista uma comparação “natural” para sua classe.

thiago.limma

Já resolvi…

nossa mto simples!

@Override
		    	public int compare(VOGenerico o1, VOGenerico o2) {
		    		
		    		return o1.toString().compareTo(o2.toString()); 
		    	}
thiago.limma

ViniGodoy:
Você diz ao Java como um VOGenerico pode ser comparado com outro VOGenerico.

Para ordenar, é necessário ser capaz de dizer se um objeto é menor, maior ou igual a outro. Retorne algo < 0 no primeiro caso, > 0 no segundo ou 0, no teceiro.

Por exemplo, esse aqui ordenaria pelo toString():

public void Compare(VOGenerico vo1, VOGenerico vo2) { return vo1.toString().compareTo(vo2); }

Esse aqui por id:

public void Compare(VOGenerico vo1, VOGenerico vo2) { if (vo1.getId() &lt; vo2.getId()) return -1; if (vo1.getId() &gt; vo2.getId()) return 1; return 0; }

Valeu cara, mto obrigado!!!

Criado 3 de julho de 2009
Ultima resposta 3 de jul. de 2009
Respostas 6
Participantes 2