quarta-feira, 22 de julho de 2015

Java como utilizar a Interface Comparable.

    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!