Ordenar um list

8 respostas
J

bom dia
alguem saberia um codigo para ordenar um lista em ordem decrescente assim

nome numero
joao 5
maria 3
jose 2
joao 5
ana 5

primeiro por numero e depois por nome ficaria assim
nome numero
ana 5
joao 5
joao 5
maria 3
jose 2

8 Respostas

Rodrigo_Sasaki

Você quer fazer a manipulação na mão? ou usar métodos utilitários?

por que você pode usar o Collections.sort() que ordena qualquer coleção.

mas para isso o seu objeto da lista precisa implementar a interface Comparable, onde você define os parâmetros de comparação.

ex:
public class Objeto implements Comparable<Objeto>{

	private int numero;
	
	@Override
	public int compareTo(Objeto other){
		if(numero > other.getNumero()){
			return 1; // retorne qualquer valor positivo para indicar que é maior
		}else if(numero < other.getNumero()){
			return -1; // retorne qualquer valor negativo para indicar que é menor
		}else{
			return 0;
		}
	}

	public int getNumero(){
		return numero;
	}

	public void setNumero(int numero){
		this.numero = numero;
	}

}
J

mas no caso ai so ordena por numero queria que ordenasse tanto por numero e nome junto

guilherme.dio

usa o compareTo da classe String.

al.barbosa

Deixa eu ver se entendi. Você quer ordenar primeiro por núiero em ordem decrescente. Em seguida por nome em ordem crescente. É isso?
Então teria que ordenar primeiro por número, na ordem descrescente. Quando os números forem iguais, aí ordenaria por nome, na ordem crescente. Concorda?
Se for isso, acho que poderia usar o código do digaoneves com uma pequena modificação:

@Override public int compareTo(Objeto other){ if(numero &lt; other.getNumero()){ // troquei o (&gt;) por (&lt;) porque é ordem descrescente return 1; // retorne qualquer valor positivo para indicar que é maior }else if(numero &gt; other.getNumero()){ return -1; // retorne qualquer valor negativo para indicar que é menor }else{ //números iguais, comparo os nomes. if(nome &gt; other.getNome()){ return 1; }else if(nome &lt; other.getNome()){ return -1; }else{ return 0; } } }

Observe no código que eu verifico primeiro se um número é menor que outro. Depois verifico se é maior. Se não for menor nem maior, é porque é igual, certo?
Então no else (números iguais), comparo os nomes.
Observe também que eu troquei o menor por maior na comparação de número, porque a ordem é decrescente.
Não esqueça de incluir a propriedade nome e os métodos de acesso getNome() e setNome().
Acho que funciona, favor dizer se resolveu.

J

deu erro dizendo que para string nao pode ser feito esse tipo de comparação

nel

Que comparação tu usou com a String ?

al.barbosa

Ok, acho que o código abaixo resolve:

@Override public int compareTo(Objeto other){ if(numero < other.getNumero()){ return 1; // retorne qualquer valor positivo para indicar que é maior }else if(numero > other.getNumero()){ return -1; // retorne qualquer valor negativo para indicar que é menor }else{ //números iguais, comparo os nomes. return nome.compareTo(other.getNome()); } }

Estou usando o método compareTo() da classe String. Este método irá retornar 1, -1 ou zero como queremos. A ideia é a mesma: número igual, comparo os nomes.

J

Que comparação tu usou com a String ?

igual ele mostrou no codigo acima,mas eu acho que tem usar o compareTo

Criado 3 de maio de 2012
Ultima resposta 3 de mai. de 2012
Respostas 8
Participantes 5