(Resolvido)Ordernar um ArrayList por um atributo

Ola pessoal gostaria de tirar uma duvida aqui com vcs, eu tenho um arrayList
e dentro desse meu arrayList eu tenho um atributo numApartamento(Numero do Apartamento)
e quero ordenar a minha list por esse atributo que esta dentro dessa lista.
Eu dei umas olhadas aqui no forum mais não consegui intender muito bem
como ordenar por esse atributo, pelo que eu intendi de alguns exemplos tenho que montar
um algoritmo para comparar os Objetos eu fiz isso por enquanto gostaria que alguem ai me desse
uma luz para me ajudar com a comparação desses Objetos

o que eu fiz…

[code]Collections.sort(listaRes, new Comparator() {

public int compare(Object o1, Object o2) {
throw new UnsupportedOperationException(“Not supported yet.”);//como que eu comparo com o meu atributo getNumApartamento para ordenar a lista?
}
});[/code]

Desde ja eu agradeço a todos pela a força…

Considerando que o atributo numApartamento é um inteiro e que você encapsulou este atributo, como abaixo:

public class Apartamento
{
    private int numApartamento;

    public int getNumApartamento()
    {
        return numApartamento;
    }

    public void setNumApartamento(int numApartamento)
    {
        this.numApartamento = numApartamento;
    }   
}

Você pode utilizar um Comparator, sem problemas, desta forma aqui (usando generics):

Collections.sort(listaRes, new Comparator<Apartamento>() {

            @Override
            public int compare(Apartamento o1, Apartamento o2)
            {
                //Crio variáveis tipo Integer, porque o int normal não tem um compareTo
                Integer numero1 = new Integer(o1.getNumApartamento());
                Integer numero2 = new Integer(o2.getNumApartamento());
                
                //utilizo o compareTo do tipo Integer
                return numero1.compareTo(numero2);
            }
        });

Para ficar mais organizado, principalmente quando estiver com muitas listas para ordenar, crie uma Classe que implemente o Comparator, como no exemplo abaixo:

import java.util.Comparator;

public class ApartamentoComparator implements Comparator<Apartamento>
{

    @Override
    public int compare(Apartamento o1, Apartamento o2)
    {
        Integer numero1 = new Integer(o1.getNumApartamento());
        Integer numero2 = new Integer(o2.getNumApartamento());
        
        return numero1.compareTo(numero2);
    }
}

Espero ter ajudado.

Voce tambem pode fazer de um modo mais simples, utilizando a interface Comparable

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Apartamento implements Comparable<Apartamento>{  
	private Integer numApartamento = 0;  

	public Integer getNumApartamento(){  
		return numApartamento;  
	}  

	public void setNumApartamento(Integer numApartamento){  
		this.numApartamento = numApartamento;  
	}

	@Override
	public int compareTo(Apartamento apartamento) {
		return this.numApartamento.compareTo(apartamento.getNumApartamento());
	}     
	
	public static void main(String [] asdf){
		Apartamento apartamento1 = new Apartamento();
		apartamento1.setNumApartamento(1);
		
		Apartamento apartamento2 = new Apartamento();
		apartamento2.setNumApartamento(2);
		
		Apartamento apartamento3 = new Apartamento();
		apartamento3.setNumApartamento(3);
		
		Apartamento apartamento4 = new Apartamento();
		apartamento4.setNumApartamento(4);
		
		List<Apartamento> listaApartamento = new ArrayList<Apartamento>();
		listaApartamento.add(apartamento4);
		listaApartamento.add(apartamento2);
		listaApartamento.add(apartamento3);
		listaApartamento.add(apartamento1);
		
		System.out.println("Lista antes");
		for (Apartamento apartamento : listaApartamento) {
			System.out.println(apartamento.getNumApartamento());
		}
		
		System.out.println("\n\nLista depois");
		//Ordenando a lista de apartamentos
		Collections.sort(listaApartamento);
		for (Apartamento apartamento : listaApartamento) {
			System.out.println(apartamento.getNumApartamento());
		}
	}
}    

ate mais

candido.areas

Opa valeu(FUNFO) cara mais eu gostaria que vc me explica-se por exemplo
vou falar o que eu acho que é…
ele pega as duas primeiras posições do arralist ai ele faz usando o compareTo isso(11) é menos que isso(10) SIM,
eu então vc e primeiro que este, mais como que ele consegue compara com um atributo que ja foi comparado e pode ser
menor que esse que um atributo que ja foi comparado ai ele teria que jogar na frente desse qua ja foi comparado?

por exemplo:

10 é menor 11, sim então

10,11

12 é menor que 9, não então

10,11,9,12

isso que eu quis dizer como ele compara com algo que ja foi comparado, ele compara novamente???

valeu por me ajudar ai amigo…
te agradeço desde ja pela a mão!

Olá amigão,
O método compareTo que você está sobreescrevendo “já sabe” como implementar a comparação corretamente entre tipos primitivos, strings e etc.
Como seu atributo que é usado para ordenação numApartamento é um objeto Integer o compareTo o ordena direitinho.
Não sei que algoritmo de ordenação o método sort usa, mas na especificação deve ter algo a respeito.
Dá uma olhada depois se puder. Abraços,