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...
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?
}
});
Você pode utilizar um Comparator, sem problemas, desta forma aqui (usando generics):
Collections.sort(listaRes,newComparator<Apartamento>(){@Overridepublicintcompare(Apartamentoo1,Apartamentoo2){//Crio variáveis tipo Integer, porque o int normal não tem um compareToIntegernumero1=newInteger(o1.getNumApartamento());Integernumero2=newInteger(o2.getNumApartamento());//utilizo o compareTo do tipo Integerreturnnumero1.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:
Voce tambem pode fazer de um modo mais simples, utilizando a interface Comparable
importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassApartamentoimplementsComparable<Apartamento>{privateIntegernumApartamento=0;publicIntegergetNumApartamento(){returnnumApartamento;}publicvoidsetNumApartamento(IntegernumApartamento){this.numApartamento=numApartamento;}@OverridepublicintcompareTo(Apartamentoapartamento){returnthis.numApartamento.compareTo(apartamento.getNumApartamento());}publicstaticvoidmain(String[]asdf){Apartamentoapartamento1=newApartamento();apartamento1.setNumApartamento(1);Apartamentoapartamento2=newApartamento();apartamento2.setNumApartamento(2);Apartamentoapartamento3=newApartamento();apartamento3.setNumApartamento(3);Apartamentoapartamento4=newApartamento();apartamento4.setNumApartamento(4);List<Apartamento>listaApartamento=newArrayList<Apartamento>();listaApartamento.add(apartamento4);listaApartamento.add(apartamento2);listaApartamento.add(apartamento3);listaApartamento.add(apartamento1);System.out.println("Lista antes");for(Apartamentoapartamento:listaApartamento){System.out.println(apartamento.getNumApartamento());}System.out.println("\n\nLista depois");//Ordenando a lista de apartamentosCollections.sort(listaApartamento);for(Apartamentoapartamento:listaApartamento){System.out.println(apartamento.getNumApartamento());}}}
ate mais
Michel_M
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!
henriqueluz
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,