Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Comparable: Ordenação Natural dos Dados | Fundamentos e Capacidades Funcionais da Stream API
Stream API

bookComparable: Ordenação Natural dos Dados

Em Java, é comum precisar ordenar objetos. Por exemplo, em uma lista de livros, pode ser necessário ordená-los por título, autor ou ano de publicação.

Para lidar com essas tarefas, Java fornece as interfaces Comparable e Comparator. Ambas alcançam o mesmo objetivo (ordenar objetos), mas fazem isso de maneiras diferentes. Vamos analisá-las separadamente.

O que é Comparable?

Por exemplo, strings em Java são ordenadas alfabeticamente por padrão porque a classe String implementa Comparable.

O método principal na interface funcional Comparable é:

int compareTo(T o);

Este método retorna:

  • Um número negativo se o objeto atual for menor que o objeto fornecido;
  • Zero se os objetos forem iguais;
  • Um número positivo se o objeto atual for maior que o objeto fornecido.

Exemplo: Ordenação de Livros por Ano

Suponha que seja necessário comparar objetos Book com base em seu ano de publicação.

Para isso, a classe Book pode implementar Comparable e sobrescrever o método compareTo. Ao sobrescrever esse método, define-se como os objetos Book devem ser comparados, o que afeta diretamente o comportamento de ordenação em métodos como Collections.sort().

Isso permite controlar a ordem em que os livros são organizados—seja crescente ou decrescente—de acordo com a lógica implementada em compareTo.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Quando Collections.sort(books) é chamado, o Java itera sobre a lista, comparando os elementos utilizando o método compareTo definido na classe Book.

Para cada comparação, compareTo retorna um valor numérico que determina a ordem de dois livros. Com base nesses valores, o algoritmo de ordenação reorganiza os elementos para que fiquem ordenados por ano de publicação crescente.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 8

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.33

bookComparable: Ordenação Natural dos Dados

Deslize para mostrar o menu

Em Java, é comum precisar ordenar objetos. Por exemplo, em uma lista de livros, pode ser necessário ordená-los por título, autor ou ano de publicação.

Para lidar com essas tarefas, Java fornece as interfaces Comparable e Comparator. Ambas alcançam o mesmo objetivo (ordenar objetos), mas fazem isso de maneiras diferentes. Vamos analisá-las separadamente.

O que é Comparable?

Por exemplo, strings em Java são ordenadas alfabeticamente por padrão porque a classe String implementa Comparable.

O método principal na interface funcional Comparable é:

int compareTo(T o);

Este método retorna:

  • Um número negativo se o objeto atual for menor que o objeto fornecido;
  • Zero se os objetos forem iguais;
  • Um número positivo se o objeto atual for maior que o objeto fornecido.

Exemplo: Ordenação de Livros por Ano

Suponha que seja necessário comparar objetos Book com base em seu ano de publicação.

Para isso, a classe Book pode implementar Comparable e sobrescrever o método compareTo. Ao sobrescrever esse método, define-se como os objetos Book devem ser comparados, o que afeta diretamente o comportamento de ordenação em métodos como Collections.sort().

Isso permite controlar a ordem em que os livros são organizados—seja crescente ou decrescente—de acordo com a lógica implementada em compareTo.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Quando Collections.sort(books) é chamado, o Java itera sobre a lista, comparando os elementos utilizando o método compareTo definido na classe Book.

Para cada comparação, compareTo retorna um valor numérico que determina a ordem de dois livros. Com base nesses valores, o algoritmo de ordenação reorganiza os elementos para que fiquem ordenados por ano de publicação crescente.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 8
some-alt