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.
Deixe um comentário