Código Mestre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Implementando a Interface Comparable em uma Classe

3 participantes

Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Implementando a Interface Comparable em uma Classe

Mensagem por Leon Dias 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
Leon Dias
YOTTABYTE
YOTTABYTE

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

Ir para o topo Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Re: Implementando a Interface Comparable em uma Classe

Mensagem por andreirs 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()?
andreirs
andreirs
YOTTABYTE
YOTTABYTE

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

Ir para o topo Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Re: Implementando a Interface Comparable em uma Classe

Mensagem por Leon Dias 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
Leon Dias
YOTTABYTE
YOTTABYTE

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

Ir para o topo Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Re: Implementando a Interface Comparable em uma Classe

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

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

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

Ir para o topo Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Re: Implementando a Interface Comparable em uma Classe

Mensagem por brunolpw 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
brunolpw
YOTTABYTE
YOTTABYTE

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

https://codigomestre.forumbrasil.net

Ir para o topo Ir para baixo

Implementando a Interface Comparable em uma Classe Empty Re: Implementando a Interface Comparable em uma Classe

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos