O método sort ordena qualquer tipo de lista que vc tenha… entretanto, ele não tem como saber como comparar uma classe que vc tenha feito… por exemplo… se vc tem a seguinte classe:
public class Pessoa {
private String name;
private int idade;
}
Como ele irá comparar? Pelo nome, pela idade?
Para resolver esse problema, o sort recebe, em uma de suas implementações, uma interface do tipo Comparator…
Vc pode não especificar o Comparator, mas olhe o que acontecerá:
public class Pessoa {
private String name;
private int idade;
public Pessoa(String name, int idade) {
super();
this.name = name;
this.idade = idade;
}
public static void main(String[] args) {
List<Pessoa> lista = new ArrayList<Pessoa>();
lista.add(new Pessoa("y", 63));
lista.add(new Pessoa("r", 33));
lista.add(new Pessoa("a", 23));
lista.add(new Pessoa("j", 53));
lista.add(new Pessoa("z", 13));
lista.add(new Pessoa("e", 43));
lista.add(new Pessoa("s", 73));
/*
* ERRO:
* Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable
* for the arguments (List<Pessoa>). The inferred type Pessoa is not a valid substitute for
* the bounded parameter <T extends Comparable<? super T>>
*/
Collections.sort(lista);
}
}
Para solucionar, mande um new Comparator como parâmetro para o método sort!
public class Pessoa {
private String name;
private int idade;
public Pessoa(String name, int idade) {
super();
this.name = name;
this.idade = idade;
}
public static void main(String[] args) {
List<Pessoa> lista = new ArrayList<Pessoa>();
lista.add(new Pessoa("y", 63));
lista.add(new Pessoa("r", 33));
lista.add(new Pessoa("a", 23));
lista.add(new Pessoa("j", 53));
lista.add(new Pessoa("z", 13));
lista.add(new Pessoa("e", 43));
lista.add(new Pessoa("s", 73));
Collections.sort(lista, new Comparator<Pessoa>(){
@Override
public int compare(Pessoa p1, Pessoa p2) {
return p1.name.compareTo(p2.name);
}
});
for(Pessoa p : lista){
System.out.println(p.name);
}
}
}
Ele não passa todos, ele compara os 2 que está olhando pra saber qm e maior e poder posicioná-lo corretamente na lista…
ok?