feat(hw-02): implement student and book stream processing

This commit is contained in:
user
2026-08-07 14:57:43 +04:00
parent 3a26e58ae2
commit 21c1190aa7
7 changed files with 388 additions and 0 deletions
@@ -0,0 +1,71 @@
package com.example;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Year;
import java.util.Comparator;
import java.util.List;
public class App {
public static void main(String[] args) {
try {
Path studentsJsonFile = Path.of("students.json");
List<Student> students = StudentReader.read(studentsJsonFile);
// Условие использования одного stream сохраняется
students.stream()
// Вывести в консоль каждого студента (переопределите toString)
.peek(System.out::println)
// Получить для каждого студента список книг
.map(s -> s.getBooks()) // Stream<List<Book>>
// Получить книги
.flatMap(List::stream) // Stream<Book>;
// Oтсортировать книги по количеству страниц (Не забывайте про условия для сравнения
// объектов)
.sorted(Comparator.comparingInt(Book::getPageCount))
// Оставить только уникальные книги
.distinct()
// Отфильтровать книги, оставив только те, которые были выпущены после 2000 года
.filter(b -> b.getPublishYear().isAfter(Year.of(2000)))
// Ограничить стрим на 3 элементах
.limit(3)
// Получить из книг годы выпуска
.map(Book::getPublishYear)
// При помощи методов короткого замыкания (почитайте самостоятельно что это такое) вернуть
// Optional от года
.findFirst()
// При помощи методов получения значения из Optional вывести в консоль год выпуска
// найденной книги, либо запись о том, что такая книга отсутствует
.ifPresentOrElse(
year -> System.out.println("Год выпуска: " + year),
() -> System.out.println("Подходящая книга отсутствует"));
} catch (IOException e) {
System.err.println("Сударь, вы передали неправильный файл!");
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
System.err.println("Ну тут мои полномочии всё!");
e.printStackTrace();
System.exit(1);
}
System.out.println("Выполнение программы завершено");
}
}