Você está aqui: Java ::: Pacote java.util ::: Comparator

Usando o método compare() da interface Comparator para definir como os elementos de uma coleção serão ordenados

Quantidade de visualizações: 4155 vezes
O perfeito entendimento do método compare() da interface Comparator é a chave para conseguirmos um maior controle sobre a forma que os elementos de uma coleção (ArrayList, Vector, TreeSet, etc) serão ordenados. Este método possui a seguinte assinatura:

int compare(T o1, T o2)

Veja que o método recebe dois argumentos do tipo T e retorna um valor inteiro. O valor retornado será um inteiro negativo se o primeiro argumento for menor que o segundo, um inteiro positivo se o primeiro argumento for maior que o segundo e zero se os dois argumentos forem iguais.

Vamos ver como isso funciona? Comece criando a seguinte classe:

package estudos;

public class Livro{
  // para simplificar o exemplo não usarei encapsulamento de dados
  String titulo;
  int paginas;
  
  // construtor não padrão
  public Livro(String titulo, int paginas){
    this.titulo = titulo;
    this.paginas = paginas;
  }
}

Veja que temos uma classe Livro com dois atributos: titulo e paginas. Nossa intenção é criar uma ArrayList de objetos da classe Livro e em seguida ordenar os livros pela quantidade de paginas, da menor para a maior. Eis o código para a classe principal:

package estudos;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Estudos{
  public static void main(String[] args) {
    // vamos criar uma ArrayList de objetos da classe Livro
    ArrayList<Livro> livros = new ArrayList();
    livros.add(new Livro("Programando em Java", 259));
    livros.add(new Livro("A Bíblia do Delphi", 1043));
    livros.add(new Livro("Aprenda PHP e MySQL", 427));
    livros.add(new Livro("Tutorial Básico de JSF", 41));
    
    // vamos ordenar os elementos do ArrayList usando o método sort() da classe Collections
    // o critério de ordenação é por paginas ascendente
    Collections.sort(livros, new Comparator<Livro>(){
      @Override
      public int compare(Livro a, Livro b){
        if(a.paginas < b.paginas){
          // se a.paginas for menor que b.paginas devemos retornar um valor negativo
          return -1;
        }
        else if(a.paginas > b.paginas){
          // se a.paginas for maior que b.paginas devemos retornar um valor positivo
          return 1;
        }
        else{ // os objetos são iguais....devemos retornar 0
          return 0;  
        }
      }
    });
    
    // vamos percorrer e exibir os valores dos elementos
    for(Livro livro : livros){
      System.out.println("Título: " + livro.titulo + "; Páginas: " + livro.paginas);
    }
  }
}

Ao executarmos este exemplo teremos o seguinte resultado:

Título: Tutorial Básico de JSF; Páginas: 41
Título: Programando em Java; Páginas: 259
Título: Aprenda PHP e MySQL; Páginas: 427
Título: A Bíblia do Delphi; Páginas: 1043

Se quisermos modificar a ordem da classificação basta trocarmos os operadores relacionais. Há uma forma interessante de se evitar os testes condicionais no método compare(). Veja:

// vamos ordenar os elementos do ArrayList usando o método sort() da classe Collectons
// o critério de ordenação é por paginas ascendente
Collections.sort(livros, new Comparator<Livro>(){
  @Override
  public int compare(Livro a, Livro b){
    return a.paginas - b.paginas;
  }
});

Mas é claro que este truque só funciona para a classificação em ordem crescente.

O método compare() da interface Comparator pode atirar duas exceções: NullPointerException se um dos argumentos for null e o comparador não permitir elementos nulos e ClassCastException se os tipos dos argumentos não permitirem a comparação.

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 49 usuários muito felizes estudando em nosso site.