A Interface Comparable impõe uma total ordenação para os objetos das classes que a implementam, essa ordenação é feita a partir do método compareTo(T o) que deve ser obrigatoriamente implementado após a interface Comparable ser implementada.
O método compareTo(T o) deverá retornar um valor inteiro sendo -1 quando o objeto que chama o método for menor que o objeto comparado , 0 (zero) quando igual e 1 quando o objeto que chama o método for maior que o objeto comparado.
Digamos que temos uma classe Pessoa que tem as variáveis
nome e
idade e queremos organizar os objetos da classe Pessoa em uma lista em ordem de menor idade para maior idade, para isso nossa classe Pessoa deve implementar a interface Comparable, a sintaxe da interface Compable é public interface Comparable<T>, onde T será o objeto a ser comparado, no nosso caso será Pessoa.
Nossa classe ficará assim:
public class Pessoa implements Comparable<Pessoa>{
}
Quando implementamos uma interface devemos implementar seus métodos no caso da interface Comparable o método que devemos implementar é o compareTo(T o) onde o T é o objeto a ser comparado no nosso caso Pessoa.
public class Pessoa implements Comparable<Pessoa>{
private String nome;
private int idade;
public Pessoa(String nome,int idade){
this.nome = nome;
this.idade = idade;
}
public int getIdade(){
return this.idade;
}
public void setCpf(int idade){
this.idade = idade;
}
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
@Override
public int compareTo(Pessoa pessoa){
return 0;
}
}
Agora tudo que devemos fazer é utilizar os atributos da classe para fazermos a ordenação, no nosso exemplo dizemos que nosso método compareTo() deve retornar -1 quando a idade seja inferior a idade do objeto que está sendo comparado, 0 quando a idade for igual a idade do objeto que está sendo comparado e 1 quando a idade for maior.
@Override
public int compareTo(Pessoa pessoa){
if( this.getIdade()<pessoa.getIdade() ){
return -1;
}else if( this.getIdade()==pessoa.getIdade() ){
return 0;
}else{
return 1;
}
}
Agora vamos criar uma classe para testar nosso exemplo, vamos criar sete objetos da classe Pessoa com nomes e idades variadas, depois vamos adicioná-las em um
ArrayList e vamos imprimi-los na tela, depois vamos utilizar o método sort da classe Collections para organizar nossos objetos, pois esse método sort utilizará o método compareTo() de cada objeto pessoa dentro do
ArrayList para fazer a ordenação, e depois de ordená-los vamos imprimi-los novamente na tela.
import java.util.ArrayList;
import java.util.Collections;
public class MainClass
{
public static void main(String[] args)
{
Pessoa p1 = new Pessoa("Renan",27);
Pessoa p2 = new Pessoa("Maria",15);
Pessoa p3 = new Pessoa("Joao",32);
Pessoa p4 = new Pessoa("Renata",8);
Pessoa p5= new Pessoa("Joseane",18);
Pessoa p6 = new Pessoa("Roberto",64);
Pessoa p7 = new Pessoa("Mario",18);
ArrayList<Pessoa> lista = new ArrayList<Pessoa>();
lista.add(p1);
lista.add(p2);
lista.add(p3);
lista.add(p4);
lista.add(p5);
lista.add(p6);
lista.add(p7);
//antes de ordenar por idade
System.out.println("Lista desordenada");
for(Pessoa p: lista){
System.out.println("Nome: "+p.getNome()+" idade: "+p.getIdade());
}
Collections.sort(lista);
System.out.println("");
//depois de ordenar
System.out.println("Lista ordenada por idade");
for(Pessoa p: lista){
System.out.println("Nome: "+p.getNome()+" idade: "+p.getIdade());
}
}
}
O Resultado será o seguinte:
Lista desordenada
Nome: Renan idade: 27
Nome: Maria idade: 15
Nome: Joao idade: 32
Nome: Renata idade: 8
Nome: Joseane idade: 18
Nome: Roberto idade: 64
Nome: Mario idade: 18
Lista ordenada por idade
Nome: Renata idade: 8
Nome: Maria idade: 15
Nome: Joseane idade: 18
Nome: Mario idade: 18
Nome: Renan idade: 27
Nome: Joao idade: 32
Nome: Roberto idade: 64
Aqui encerro esse artigo! Espero ter ajudado!