72 lines
2.7 KiB
Java
72 lines
2.7 KiB
Java
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("Выполнение программы завершено");
|
|
}
|
|
}
|