ToBack
Setembro 16, 2007, 8:14pm
#1
Caros,
Na classe abaixo consigo ordenar pelo nome, como faço para decidir por qual atributo ordenar nome ou matricula??
public class Nome implements Comparable<Nome>{
private String nome;
private int matricula;
public Nome() {
}
public String getNome() {
return this.nome;
}
public String getMatricula() {
String mat = ""+this.matricula;
return mat;
}
public void setNome(String n) {
this.nome = n;
}
public void setMatricula(int m) {
this.matricula = m;
}
public int compareTo(Nome n) {
return this.nome.compareToIgnoreCase(n.nome);
}
thingol
Setembro 16, 2007, 10:54pm
#2
Normalmente você usa um Comparator. Exemplo:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Aluno {
private String nome;
private long matricula;
public Aluno (String pNome, long pMatricula) {
nome = pNome; matricula = pMatricula;
}
public long getMatricula() {
return matricula;
}
public void setMatricula(long pMatricula) {
matricula = pMatricula;
}
public String getNome() {
return nome;
}
public void setNome(String pNome) {
nome = pNome;
}
public String toString () {
return "(nome=" + nome + ",matricula=" + matricula + ")";
}
}
class AlunoComparator implements Comparator<Aluno> {
private boolean compararPorNome;
public AlunoComparator (boolean pCompararPorNome) {
compararPorNome = pCompararPorNome;
}
/**
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Aluno aluno1, Aluno aluno2) {
if (compararPorNome) {
return aluno1.getNome().compareTo(aluno2.getNome());
} else {
return aluno1.getMatricula() < aluno2.getMatricula() ?
-1 : (aluno1.getMatricula() > aluno2.getMatricula() ? +1 : 0);
}
}
}
public class TesteComparator {
public static void main(String[] args) {
List<Aluno> alunos = new ArrayList<Aluno>();
alunos.add(new Aluno ("Luis Inacio", 13));
alunos.add(new Aluno ("Fernando Henrique", 45));
alunos.add(new Aluno ("Fernando Mello", 31));
System.out.println ("Lista original: ");
System.out.println (alunos);
System.out.println ("Lista ordenada por nome: ");
Collections.sort (alunos, new AlunoComparator (true));
System.out.println (alunos);
System.out.println ("Lista ordenada por matricula: ");
Collections.sort (alunos, new AlunoComparator (false));
System.out.println (alunos);
}
}