Повторение — Кастомная сортировка
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 46 из 87.
Задание
ЛегкоДавайте создадим менеджер коллекции книг, который объединит все, что вы узнали о специальных методах и сортировке. Вы создадите класс 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книг и продемонстрируйте все три подхода к сортировке:- Отсортируйте, используя естественный порядок (по году), и выведите каждую книгу
- Выведите пустую строку
- Отсортируйте по названию, используя
TitleComparator, и выведите каждую книгу - Выведите пустую строку
- Отсортируйте по автору, используя
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, и вывести каждую книгу
}
}Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»