Implementando a Interface Comparable em uma Classe
3 participantes
Código Mestre :: Programação :: Java
Página 1 de 1
Implementando a Interface Comparable em uma Classe
É 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:
Feito isso a IDE pedirá para que seja implementado um método dessa interface que é o compareTo
Método:
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:
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:
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
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- YOTTABYTE
- Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 35
Localização : Porto Alegre
Re: Implementando a Interface Comparable em uma Classe
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()?
E sobre método sort(), ele é exatamente a mesma coisa que o método CompareTo()?
andreirs- YOTTABYTE
- Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 31
Localização : Porto Alegre
Re: Implementando a Interface Comparable em uma Classe
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:
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.
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- YOTTABYTE
- Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 35
Localização : Porto Alegre
Re: Implementando a Interface Comparable em uma Classe
Entendi. Obrigado pela explicação, Leon! Abraço!
andreirs- YOTTABYTE
- Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 31
Localização : Porto Alegre
Re: Implementando a Interface Comparable em uma Classe
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.
Código Mestre :: Programação :: Java
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|