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)
import java.util.*;
/** Aqui supomos que não há alunos com o mesmo nome */
class Aluno {
String nome;
double nota;
public Aluno (String pNome, double pNota) {
nome = pNome; nota = pNota;
}
public String toString () {
return String.format ("Nome=%s, Nota=%.2f; ", nome, nota);
}
}
class AlunoComparator implements Comparator<Aluno> {
public int compare (Aluno a1, Aluno a2) {
return a1.nome.compareToIgnoreCase (a2.nome);
}
}
class ListaAlunos {
public static void main(String[] args) {
Set<Aluno> alunos = new TreeSet<Aluno>(new AlunoComparator());
alunos.add (new Aluno ("Luis Inacio", 5.0));
alunos.add (new Aluno ("Fernando Henrique", 7.0));
alunos.add (new Aluno ("Gabriel Pensador", 8.0));
alunos.add (new Aluno ("Mano Brown", 5.0));
alunos.add (new Aluno ("Gisele Bundchen", 10.0));
Aluno procurado = new Aluno ("Natalia Guimaraes", 10);
if (!alunos.contains (procurado)) {
System.out.println ("aluno não encontrado");
} else {
System.out.println ("aluno encontrado", procurado);
}
}
}
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.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
*/
class Presidente {
String nome;
int inicio;
int fim;
public Presidente(String n, int i, int f) {
nome = n; inicio = i; fim = f;
}
public String toString() {
return nome + ": de " + inicio + " até " + fim;
}
}
class ComparatorPresidente implements Comparator {
boolean crescente = true;
public ComparatorPresidente(boolean crescente) {
this.crescente = crescente;
}
public int compare(Object o1, Object o2) {
Presidente p1 = (Presidente) o1;
Presidente p2 = (Presidente) o2;
if (crescente) {
return p1.inicio < p2.inicio ? -1 : (p1.inicio > p2.inicio ? +1 : 0);
} else {
return p1.inicio < p2.inicio ? +1 : (p1.inicio > p2.inicio ? -1 : 0);
}
}
}
class Test126 {
public static void main(String[] args) {
List teste = new ArrayList();
teste.add (new Presidente ("Luis Inacio", 2002, 2005));
teste.add (new Presidente ("Fernando Henrique", 1998, 2001));
teste.add (new Presidente ("Fernando Henrique", 1994, 1997));
// Em ordem crescente do início do mandato
Collections.sort (teste, new ComparatorPresidente(true));
System.out.println (teste);
// Em ordem decrescente do fim do mandato
Collections.sort (teste, new ComparatorPresidente(false));
System.out.println (teste);
}
}