Vamos começar com algo facíl, organizar uma lista de Strings, para isso a classe java.util.Collections nos fornece o método sort();
public class Teste {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();
nomes.add("Zeca");
nomes.add("Cristiano");
nomes.add("Adriana");
nomes.add("Joao");
System.out.println("Não classificado: " + nomes);
Collections.sort(nomes);
System.out.println("Classificado: " + nomes);
}
}
Iremos ter como retorno
Não classificado: [Zeca, Cristiano, Adriana, Joao]
Classificado: [Adriana, Cristiano, Joao, Zeca]
Agora vamos começar a complicar um pouco.
Queremos classificar uma lista de Objectos de Clientes, pelo nome por exemple.
public class Cliente {
private String nome;
private Integer idade;
//Getters e Setters
}
Se fizermos como fizemos com String teremos erro de compilação
public class Teste {
public static void main(String[] args) {
List<Cliente> clientes = new ArrayList<Cliente>();
Cliente c1 = new Cliente();
c1.setNome("Zeca");
c1.setIdade(24);
clientes.add(c1);
Cliente c2 = new Cliente();
c2.setNome("Cristiano");
c2.setIdade(22);
clientes.add(c2);
Cliente c3 = new Cliente();
c3.setNome("Joao");
c3.setIdade(43);
clientes.add(c3);
Collections.sort(clientes); //ERRO DE COMPILAÇÃO
}
Porque isso acontece?
Se você ler o método sort(), você vai ver que a Collection (no nosso caso o Cliente) deve implementar a interface comparable, a String implementa o comparable por isso conseguimos utilizar o sort() com ele, então é simples se você quer utilizar o sort() com o Cliente basta implementar o comparable na classe Cliente, vou mostrar como fazer isso.
public class Cliente implements Comparable<Cliente>{
private String nome;
private Integer idade;
//Getters e Setters
@Override
public int compareTo(Cliente o) {
return nome.compareTo(o.getNome());
}
}
Ao implementar o comparable devemos implementar na classe o método compareTo(), com isso estamos classificando nossa lista por nome (poderíamos fazer também com idade sem problemas). Agora podemos utilizar o Collections.sort(clientes) sem problemas que não teremos nenhum erro de compilação. Vou mostrar como fazer e como fica e ainda como fazer em ordem decrescente, basta utilizar o Cllections.reverse(clientes).
public class Teste {
public static void main(String[] args) {
List<Cliente> clientes = new ArrayList<Cliente>();
Cliente c1 = new Cliente();
c1.setNome("Zeca");
c1.setIdade(24);
clientes.add(c1);
Cliente c2 = new Cliente();
c2.setNome("Cristiano");
c2.setIdade(22);
clientes.add(c2);
Cliente c3 = new Cliente();
c3.setNome("Joao");
c3.setIdade(43);
clientes.add(c3);
System.out.println("---------\nNão Ordernado\n---------");
for (Cliente c : clientes) {
System.out.println("Nome: " + c.getNome());
System.out.println("Idade: " + c.getIdade());
}
System.out.println("---------\nOrdernado\n---------");
Collections.sort(clientes);
for (Cliente c : clientes) {
System.out.println("Nome: " + c.getNome());
System.out.println("Idade: " + c.getIdade());
}
System.out.println("---------\nOrdernado Decrescente\n---------");
Collections.sort(clientes);
Collections.reverse(clientes);
for (Cliente c : clientes) {
System.out.println("Nome: " + c.getNome());
System.out.println("Idade: " + c.getIdade());
}
}
}
Teremos como resultado.
---------
Não Ordernado
---------
Nome: Zeca
Idade: 24
Nome: Cristiano
Idade: 22
Nome: Joao
Idade: 43
---------
Ordernado
---------
Nome: Cristiano
Idade: 22
Nome: Joao
Idade: 43
Nome: Zeca
Idade: 24
---------
Ordernado Decrescente
---------
Nome: Zeca
Idade: 24
Nome: Joao
Idade: 43
Nome: Cristiano
Idade: 22
No próximo post irei mostrar o Comparator e as diferenças entre Comparator e Comparable
Nenhum comentário:
Postar um comentário