Menu
Coddy logo textTech

Повторение — Кастомная сортировка

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 46 из 87.

challenge icon

Задание

Легко

Давайте создадим менеджер коллекции книг, который объединит все, что вы узнали о специальных методах и сортировке. Вы создадите класс Book с правильными методами toString(), equals(), hashCode() и естественным порядком сортировки через Comparable, а также внешние компараторы для гибких вариантов сортировки.

Вы организуете свой код в четырех файлах:

  • Book.java: Создайте класс, представляющий книгу с тремя приватными полями: title (String), author (String) и year (int). Включите конструктор и геттеры для всех полей.

    Ваш класс Book должен реализовывать Comparable<Book> с естественным порядком сортировки по year в возрастающем порядке (сначала самые старые).

    Переопределите toString(), чтобы он возвращал: [title] by [author] ([year])

    Переопределите equals() так, чтобы две книги считались равными, если у них одинаковые title И author. Переопределите hashCode(), используя Objects.hash() с теми же полями.

  • TitleComparator.java: Создайте компаратор, который сортирует книги по алфавиту по названию в возрастающем порядке (от A до Z).
  • AuthorComparator.java: Создайте компаратор, который сортирует книги по алфавиту по автору в возрастающем порядке (от A до Z).
  • Main.java: Соберите все вместе! Вы получите входные данные для трех книг, каждая на отдельной строке в формате: title,author,year

    Создайте ArrayList книг и продемонстрируйте все три подхода к сортировке:

    1. Отсортируйте, используя естественный порядок (по году), и выведите каждую книгу
    2. Выведите пустую строку
    3. Отсортируйте по названию, используя TitleComparator, и выведите каждую книгу
    4. Выведите пустую строку
    5. Отсортируйте по автору, используя AuthorComparator, и выведите каждую книгу

Вы получите три строки входных данных, каждая из которых содержит данные о книге в формате: title,author,year

Например: 1984,George Orwell,1949

Не забудьте импортировать java.util.Objects в Book.java, java.util.Comparator в файлы ваших компараторов, а также java.util.ArrayList, java.util.Collections и java.util.Scanner в Main.java.

Попробуйте сами

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);
        
        // Прочитать три книги из входных данных
        String line1 = scanner.nextLine();
        String line2 = scanner.nextLine();
        String line3 = scanner.nextLine();
        
        // TODO: Разобрать каждую строку, чтобы извлечь название, автора и год
        // Подсказка: используйте split(","), чтобы разделить значения
        
        // TODO: Создать объекты Book из разобранных данных
        
        // TODO: Создать ArrayList и добавить все три книги
        
        // TODO: Отсортировать, используя естественный порядок (по году), и вывести каждую книгу
        
        // TODO: Вывести пустую строку
        
        // TODO: Отсортировать по названию, используя TitleComparator, и вывести каждую книгу
        
        // TODO: Вывести пустую строку
        
        // TODO: Отсортировать по автору, используя AuthorComparator, и вывести каждую книгу
    }
}

Все уроки раздела Объектно-ориентированное программирование

7Специальные методы и класс Object

Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка