Interface Comparator em Java

Como podemos comparar dois objetos e determinar qual deve ser a ordem de ordenação entre eles?

Por exemplo, imagine o objeto Casa. Como podemos definir, entre duas casas, qual deve estar ordenada primeiro em nosso sistema? Pelo endereço? Pelo valor? Pelo tamanho?

Para definir isso em Java, usamos a interface "Comparator".

A interface Comparator

A interface "Comparator" em Java, portanto, é usada para definir uma ordem de comparação personalizada entre objetos, permitindo classificar coleções ou ordenar elementos de forma diferente da ordem natural da classe. Ela oferece flexibilidade para definir critérios de comparação específicos, além de permitir encadeamento de critérios para classificações mais complexas.

A interface Comparator define um método compare(arg1, arg2) com dois argumentos que representam objetos comparados e funciona de forma semelhante ao método Comparable.compareTo() .

Em Java, convencionou-se que o "Comparator" funciona retornando valores positivos, negativos ou zero. Mas, por que isso?

Como o compare (ou compareTo da interface comparable) funciona?

O método compare(objeto1, objeto2) (ou compareTo(other)):

  • Retorna um valor negativo (< 0):

    • Isso significa que objeto1 é considerado "menor" que objeto2. Na ordenação, o1 virá antes de o2.
  • Retorna zero (= 0):

    • Isso significa que objeto1 é considerado "igual" a objeto2 em termos de ordenação.
  • Retorna um valor positivo (> 0):

    • Isso significa que objeto1 é considerado "maior" que o2.

Em outras palavras, conforme a documentação oficial do java:

  • Se objeto1 < objeto2: Retorna um número negativo.
  • Se objeto1 > objeto2: Retorna um número positivo.
  • Em todos os casos, compare(objeto1, objeto2) e compare(objeto2, objeto1) devem retornar sinais opostos.

Pratique

Você pode praticar esse conceito pelo exercício Java Comparator

Dicas complementares:

Evite o truque da subtração

Prefira o método Integer.compare() do que subtrair dois números para obter o menor valor: Comparator and Comparable in Java - Baeldung

Entenda a diferença entre comparator e comparable

Devo publicar outro artigo sobre isso.

Documentação

Documentação Java: Writing comparators

0
Subscribe to my newsletter

Read articles from Lucas de Godoy Chicarelli directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Lucas de Godoy Chicarelli
Lucas de Godoy Chicarelli