Como ordenar lista com Comparator em Java: Guia Completo

Se você está buscando entender como ordenar lista com Comparator em Java, este post é para você. Ordenar listas é uma tarefa comum em programação, e o Comparator oferece uma forma flexível de definir critérios personalizados de ordenação para objetos.

O que é Comparator em Java?

O Comparator é uma interface funcional em Java que permite personalizar a ordenação de objetos em uma lista. Ao contrário do método Comparable, que exige que a classe do objeto implemente a interface para definir a ordenação, o Comparator permite que você defina a lógica de comparação fora da própria classe.

Como funciona o Comparator em Java?

A interface Comparator contém o método compare(), que é usado para comparar dois objetos. Dependendo do valor retornado por esse método, o Java saberá como ordenar os elementos. O método compare() retorna:

  • Negativo: Se o primeiro objeto é “menor” que o segundo.
  • Zero: Se os dois objetos são “iguais”.
  • Positivo: Se o primeiro objeto é “maior” que o segundo.

Aqui está um exemplo simples de como usar o Comparator para ordenar uma lista de objetos:

import java.util.*;

class Pessoa {
    String nome;
    int idade;

    Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    public String getNome() {
        return nome;
    }

    public int getIdade() {
        return idade;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Pessoa> pessoas = Arrays.asList(
            new Pessoa("Ana", 25),
            new Pessoa("Bruno", 30),
            new Pessoa("Carlos", 20)
        );

        // Comparator para ordenar por idade
        Comparator<Pessoa> comparaPorIdade = (p1, p2) -> Integer.compare(p1.getIdade(), p2.getIdade());

        Collections.sort(pessoas, comparaPorIdade);

        // Imprime a lista ordenada
        pessoas.forEach(p -> System.out.println(p.getNome() + " - " + p.getIdade()));
    }
}

Ordenando listas com Comparator

Usar Comparator é simples. Basta criar uma instância de Comparator e passá-la para o método Collections.sort(), como mostrado no exemplo acima. Além disso, o Comparator permite ordenar de forma ascendente ou descendente com a mesma facilidade, basta inverter a lógica de comparação.

Comparator<Pessoa> comparaPorIdadeDesc = (p1, p2) -> Integer.compare(p2.getIdade(), p1.getIdade());
Collections.sort(pessoas, comparaPorIdadeDesc); // Ordenação descendente

Comparator com várias condições

É possível usar múltiplos critérios de ordenação com Comparator, tornando a comparação mais robusta. Por exemplo, podemos ordenar por idade e, se houver empate, ordenar por nome:

Comparator<Pessoa> comparaPorIdadeENome = (p1, p2) -> {
    int idadeComparacao = Integer.compare(p1.getIdade(), p2.getIdade());
    if (idadeComparacao != 0) {
        return idadeComparacao;
    }
    return p1.getNome().compareTo(p2.getNome());
};

Collections.sort(pessoas, comparaPorIdadeENome);

Neste exemplo, primeiro comparamos pela idade, e caso as idades sejam iguais, o nome é utilizado como critério de desempate.

Quando usar Comparator em Java?

O Comparator é ideal quando:

  • Você não tem controle sobre a classe dos objetos, mas precisa ordená-los de uma forma específica.
  • Deseja ordenar de formas diferentes em momentos distintos do código.

Para mais detalhes sobre como comparar objetos e trabalhar com coleções, confira o nosso post sobre Comparable em Java: Como Funciona.

Link externo relevante

Você pode conferir mais sobre a interface Comparator na documentação oficial da Oracle.


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *