Minha pergunta é facil, mas nao estou conseguindo fazer…!!!
Preciso ordenar List, bem no caso o codigo já esta usando o metodo sort(), porem so esta ordenando um campo, no meu caso cliente e preciso que ordene primeiro as datas…
Existe um select, porem o order by nao esta funcionando neste caso, se alguem puder me ajudar fico grato…
Eu poderia mandá-lo pesquisar no guj sobre como resolve este problema. Já foi explicado uma centena de vezes.
Mas fica mais uma …
Para ordenar objectos de classes que não têm ordem intrinseca deve-se implementar um, ou mais, Comparator.
Depois usar o metodo Collections.sort(list,comparator) para fazer a ordenação. É muito simples.
Cliente não tem ordem intrinseca, por isso implementar Comparable é errado. Implemente vários Comparator, um para cada campo que quer ordenar, ou um Comparator só onde vc passa o campo que quer ordenar. Como opção pode indicar ainda a direcção da ordenação ( ascendente ou descendente)
T
thingol
Um exemplo bobo.
importjava.util.*;/** Aqui supomos que não há alunos com o mesmo nome */classAluno{Stringnome;doublenota;publicAluno(StringpNome,doublepNota){nome=pNome;nota=pNota;}publicStringtoString(){returnString.format("Nome=%s, Nota=%.2f; ",nome,nota);}}classAlunoComparatorimplementsComparator<Aluno>{publicintcompare(Alunoa1,Alunoa2){returna1.nome.compareToIgnoreCase(a2.nome);}}classListaAlunos{publicstaticvoidmain(String[]args){Set<Aluno>alunos=newTreeSet<Aluno>(newAlunoComparator());alunos.add(newAluno("Luis Inacio",5.0));alunos.add(newAluno("Fernando Henrique",7.0));alunos.add(newAluno("Gabriel Pensador",8.0));alunos.add(newAluno("Mano Brown",5.0));alunos.add(newAluno("Gisele Bundchen",10.0));Alunoprocurado=newAluno("Natalia Guimaraes",10);if(!alunos.contains(procurado)){System.out.println("aluno não encontrado");}else{System.out.println("aluno encontrado",procurado);}}}
importjava.util.Collections;importjava.util.List;importjava.util.ArrayList;importjava.util.Comparator;/* * Para compilar este programa: * javac Test126.java * Para rodar este programa (Windows): * chcp 1252 * java -cp . Test126 * Para rodar este programa (Linux): * java -cp . Test126 */classPresidente{Stringnome;intinicio;intfim;publicPresidente(Stringn,inti,intf){nome=n;inicio=i;fim=f;}publicStringtoString(){returnnome+": de "+inicio+" até "+fim;}}classComparatorPresidenteimplementsComparator{booleancrescente=true;publicComparatorPresidente(booleancrescente){this.crescente=crescente;}publicintcompare(Objecto1,Objecto2){Presidentep1=(Presidente)o1;Presidentep2=(Presidente)o2;if(crescente){returnp1.inicio<p2.inicio?-1:(p1.inicio>p2.inicio?+1:0);}else{returnp1.inicio<p2.inicio?+1:(p1.inicio>p2.inicio?-1:0);}}}classTest126{publicstaticvoidmain(String[]args){Listteste=newArrayList();teste.add(newPresidente("Luis Inacio",2002,2005));teste.add(newPresidente("Fernando Henrique",1998,2001));teste.add(newPresidente("Fernando Henrique",1994,1997));// Em ordem crescente do início do mandatoCollections.sort(teste,newComparatorPresidente(true));System.out.println(teste);// Em ordem decrescente do fim do mandatoCollections.sort(teste,newComparatorPresidente(false));System.out.println(teste);}}
Marques
Assim vc “sorteia” um ou mais atributos de um List