DEV Community

Paula Santana
Paula Santana

Posted on

3 2

Java Efetivo Essencial - Comparable

Pense na possibilidade de implementar o Comparable

Esta é uma série baseada no entendimento de tópicos relacionados ao livro com foco no resumo.

O que é

No Java quando desejamos fazer comparações entre classes de valor, fazemos com que essas classes implementem a interface Comparable ou Comparator.
Neste post vamos analisar mais sobre a interface Comparable que é abordada no livro Java Efetivo e que possui apenas um único método, o compareTo().

Comparable

Quando uma classe implementa essa Interface esta assumindo que há ordenação natural entre objetos da classe.
Além disso você permite que sua classe funcione com todos os algoritmos genéricos e com as implementações de coleções que dependem dessa interface como a TreeSet e TreeMap.
Se olharmos para as classes já existentes da plataforma Java, todas acabam implementando essa interface, além de que os Enums também por default implementam essa interface.

Como?

Image description

1-> Implementamos a interface Comparable
2-> Implementamos o Método compareTo()
3-> No método estou comparando o atributo nome que é uma String que já implementa também o método compareTo().
É importante termos em mente que para implementarmos esse método precisamos seguir um contrato geral.

Comparações

O contrato geral segue os seguintes itens:
1- Temos que garantir que na comparação onde temos dois objetos de comparação que se AA e se B>A, então A 2- Temos que garantir que se B>A e A>C então B>C
3- Se possível garantir que o resultado de comparação no compareTo seja semelhante o do equals.
4- Se o tipo comparado não for igual deve retornar ClassCastException
5- Se o tipo for nulo deve retornar NullPointerException.

Não é recomendado mais utilização de comparadores de valor < e > , existem métodos fluídos na implementação de Comparators após a versão 8 do Java.
Se um campo do objeto não implementar Comparable será necessário criar um Comparator desse tipo.
Se você deseja comparar múltiplos valores, a ordem a qual é comparada importa, sendo necessário sempre começarmos com os campos mais significativos.Sendo que se a comparação resultar em algo diferente de zero já pode retornar, se não continue comparando os próximos campos.

Image description
Acima vemos a aplicação da regra sobre comparação de múltiplos campos.

Em alguns casos podemos utilizar a criação de Comparators, no exemplo acima utilizamos como uma constante estática, utilizando os recursos que foram adicionados no Java 8, facilitamos muito o uso de comparações que envolvem múltiplos campos.

Image description

Resumindo
O livro aborda que quando é implementada uma classe de valor que exista uma ordenação para as instâncias que sejam implementadas a interface Comparable.
Procure usar sempre os métodos estáticos compare() que existem nos tipos primitivos empacotados ou use comparadores através da interface Comparator.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay