Implementando a Interface Comparable em uma Classe

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Implementando a Interface Comparable em uma Classe

Mensagem por Leon Dias em Seg 15 Jul 2013, 12:37 am

É possível usar um atributo de uma classe como comparador, seja ele do tipo inteiro, caractere, Objeto ou até mesmo String,
o que precisa-se fazer primeiramente é implementar na classe a interface Comparable, e como o type generic o nome da classe,

Exemplo:

Código:
public class Pessoa implements Comparable<Pessoa> {...

Feito isso a IDE pedirá para que seja implementado um método dessa interface que é o compareTo

Método:

Código:
@Override
  public int compareTo(Pessoa o) {
    
    return 0;
  }

Por padrão esse método vai retornar 0, mas é possível configurar o método compareTo, (escolher o atributo que desejas comparar),
Podemos no caso da classe citada no exemplo (Pessoa), escolher o atributo nome para usar no método compareTo.

Este ficaria assim:

Código:
public class Pessoa implements Comparable<Pessoa> {
  
 private String id;
 private String nome;
 private int idade;

 @Override
  public int compareTo(Pessoa o) {
      if(this.nome.compareTo(o.nome)<0){
          return -1;
      }
      else if(this.nome.compareTo(o.nome)>0){
      
          return 1;
      }
      else return 0;
  }

Feito isso quando se usar o utilitário Collections que tem como parâmetro uma lista do tipo interface List, o mesmo irá interpretar que o que deverá
ser comparado é o nome, o mesmo pode ser feito com qualquer outro tipo de atributo, basta modificar o método compareTo da classe do objeto alvo.
Exemplo:

Código:
List listaDePessoas = new ArrayList<Pessoas>();


    Collections.sort(lisaDePessoas);

Será ordenada a lista de pessoas pelo nome, e será ordenado do nome da letra A até a letra Z, ou seja, em ordem crescente.

Espero que tenha sido útil essa minha primeira postagem,
muito obrigado colegas e programadores,

Abraço


Última edição por Leon Dias em Qui 18 Jul 2013, 11:21 pm, editado 6 vez(es)

_________________
Leon Dias Vieira
Administrador do Fórum.

Leon Dias
YOTTABYTE
YOTTABYTE

Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 27
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Implementando a Interface Comparable em uma Classe

Mensagem por andreirs em Seg 15 Jul 2013, 12:39 am

Muito bom a postagem, Leon. Compreendi bem, mas se bem me lembro, tu havias me contado que o método CompareTo() é baseado na tabela ASCII, não é? Então, o número retornado por este método pode ser qualquer um, depende da posição em que os valores selecionados estejam na tabela?
E sobre método sort(), ele é exatamente a mesma coisa que o método CompareTo()?

_________________
/**
* @author Ândrei
* @title YottaByte
*/

http://codigomestre.forumbrasil.net/

andreirs
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 24
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Implementando a Interface Comparable em uma Classe

Mensagem por Leon Dias em Seg 15 Jul 2013, 12:55 am

O método sort é um método da classe Collections, esse vai comparar o objeto da classe somente se ele for do tipo Comparable, ou seja, a classe vai ter que obrigatoriamente implementar a interface Comparable; para o sort saber ordenar os membros dessa classe, ele vai ter que saber qual é o atributo escolhido, por exemplo, no caso de uma lista de produtos, o método sort pode ordenar por preço, assim sendo no método compareTo da classe será comparado o preço.

Exemplo:

Código:
@Override
   public int compareTo(Produto o) {
      if(this.preco > o.preco){
         
         return 1;
      }
      else if(this.preco < o.preco){
         
         return -1;
      }
      else
         return 0;
   }

E no caso da tabela ASC, ela vai servir para comparar caracteres, já que os mesmos não podem ser comparados de maneira aritmética por causa do seu tipo.

_________________
Leon Dias Vieira
Administrador do Fórum.

Leon Dias
YOTTABYTE
YOTTABYTE

Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 27
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Implementando a Interface Comparable em uma Classe

Mensagem por andreirs em Seg 15 Jul 2013, 2:42 pm

Entendi. Obrigado pela explicação, Leon! Abraço!

_________________
/**
* @author Ândrei
* @title YottaByte
*/

http://codigomestre.forumbrasil.net/

andreirs
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 24
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Implementando a Interface Comparable em uma Classe

Mensagem por brunolpw em Seg 15 Jul 2013, 6:41 pm

O legal disso é que tu pode implementar vários dele numa lista de objetos e na aplicação definir o tipo de ordenação que deseja, achei legal isso.

brunolpw
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 14
Data de inscrição : 14/07/2013
Idade : 26
Localização : Brasil - RS - Porto Alegre

http://codigomestre.forumbrasil.net

Voltar ao Topo Ir em baixo

Re: Implementando a Interface Comparable em uma Classe

Mensagem por Conteúdo patrocinado Hoje à(s) 1:43 am


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum