Recapitulação - Ordenação Personalizada
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 46 de 87.
Desafio
FácilVamos construir um gerenciador de coleção de livros que reúne tudo o que você aprendeu sobre métodos especiais e ordenação. Você criará uma classe Book com os métodos toString(), equals(), hashCode() adequados e ordenação natural via Comparable, além de comparadores externos para opções de ordenação flexíveis.
Você organizará seu código em quatro arquivos:
Book.java: Crie uma classe representando um livro com três campos privados:title(String),author(String) eyear(int). Inclua um construtor e getters para todos os campos.Sua classe Book deve implementar
Comparable<Book>com ordenação natural poryearem ordem crescente (mais antigo primeiro).Sobrescreva
toString()para retornar:[title] by [author] ([year])Sobrescreva
equals()para que dois livros sejam iguais quando tiverem o mesmotitleEauthor. SobrescrevahashCode()usandoObjects.hash()com os mesmos campos.TitleComparator.java: Crie um comparador que ordene os livros alfabeticamente por título em ordem crescente (A a Z).AuthorComparator.java: Crie um comparador que ordene os livros alfabeticamente por autor em ordem crescente (A a Z).Main.java: Reúna tudo! Você receberá a entrada para três livros, cada um em uma linha separada no formato:title,author,yearCrie um
ArrayListde livros e demonstre todas as três abordagens de ordenação:- Ordene usando a ordenação natural (por ano) e imprima cada livro
- Imprima uma linha vazia
- Ordene por título usando
TitleComparatore imprima cada livro - Imprima uma linha vazia
- Ordene por autor usando
AuthorComparatore imprima cada livro
Você receberá três linhas de entrada, cada uma contendo dados do livro no formato: title,author,year
Por exemplo: 1984,George Orwell,1949
Lembre-se de importar java.util.Objects em Book.java, java.util.Comparator em seus arquivos de comparador, e java.util.ArrayList, java.util.Collections e java.util.Scanner em Main.java.
Experimente você mesmo
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ler três livros da entrada
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: Analisar cada linha para extrair título, autor e ano
// Dica: Use split(",") para separar os valores
// TODO: Criar objetos Book a partir dos dados analisados
// TODO: Criar um ArrayList e adicionar todos os três livros
// TODO: Ordenar usando a ordenação natural (por ano) e imprimir cada livro
// TODO: Imprimir uma linha vazia
// TODO: Ordenar por título usando TitleComparator e imprimir cada livro
// TODO: Imprimir uma linha vazia
// TODO: Ordenar por autor usando AuthorComparator e imprimir cada livro
}
}Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator