/
Reginaa
/
Java_lab
Обзор
Документация
Войти
/
Reginaa
/
Java_lab
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4-submission
src/main/java/org/example/lab4/Main.java
115 строк
5 KB
Regina
feat: implement task 6 - generate SMS messages based on book count
10 окт 2025, 21:04
10 окт 2025, 21:04
9d42453
Код
Авторство
О чём код?
package org.example.lab4; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // Загрузка данных из JSON Gson gson = new Gson(); Type visitorListType = new TypeToken<List<Visitor>>(){}.getType(); List<Visitor> visitors = gson.fromJson( new InputStreamReader(Main.class.getResourceAsStream("/books.json")), visitorListType ); // Задание 1: Вывести список посетителей и их количество System.out.println("=== Задание 1 ==="); System.out.println("Список посетителей:"); visitors.forEach(visitor -> System.out.println(visitor.getFirstName() + " " + visitor.getLastName()) ); System.out.println("Общее количество посетителей: " + visitors.size()); // Задание 2: Вывести список и количество всех уникальных книг System.out.println("\n=== Задание 2 ==="); long uniqueBooksCount = visitors.stream() .flatMap(visitor -> visitor.getFavoriteBooks().stream()) .distinct() .count(); System.out.println("Количество уникальных книг: " + uniqueBooksCount); // Вывод списка уникальных книг System.out.println("Список уникальных книг:"); visitors.stream() .flatMap(visitor -> visitor.getFavoriteBooks().stream()) .distinct() .forEach(book -> System.out.println(" - " + book.getTitle() + " (" + book.getAuthor() + ")")); // Задание 3: Отсортировать книги по году издания System.out.println("\n=== Задание 3 ==="); System.out.println("Книги, отсортированные по году издания:"); visitors.stream() .flatMap(visitor -> visitor.getFavoriteBooks().stream()) .distinct() .sorted((b1, b2) -> Integer.compare(b1.getYear(), b2.getYear())) .forEach(book -> System.out.println(" - " + book.getYear() + ": " + book.getTitle())); // Задание 4: Проверить наличие книг Jane Austen System.out.println("\n=== Задание 4 ==="); boolean hasJaneAusten = visitors.stream() .flatMap(visitor -> visitor.getFavoriteBooks().stream()) .anyMatch(book -> "Jane Austen".equals(book.getAuthor())); System.out.println("Есть ли книги Jane Austen в избранном: " + (hasJaneAusten ? "Да" : "Нет")); // Задание 5: Максимальное число книг у одного посетителя System.out.println("\n=== Задание 5 ==="); int maxBooks = visitors.stream() .mapToInt(visitor -> visitor.getFavoriteBooks().size()) .max() .orElse(0); System.out.println("Максимальное количество книг у одного посетителя: " + maxBooks); // Задание 6: Генерация SMS сообщений System.out.println("\n=== Задание 6 ==="); // Вычисляем среднее количество книг double averageBooks = visitors.stream() .mapToInt(visitor -> visitor.getFavoriteBooks().size()) .average() .orElse(0.0); System.out.println("Среднее количество книг: " + String.format("%.2f", averageBooks)); // Генерируем SMS сообщения List<SmsMessage> smsMessages = visitors.stream() .filter(Visitor::isSubscribed) .map(visitor -> { int bookCount = visitor.getFavoriteBooks().size(); String message; if (bookCount > averageBooks) { message = "Вы настоящий книжный червь!"; } else if (bookCount < averageBooks) { message = "Читайте больше!"; } else { message = "Нормально!"; } return new SmsMessage(visitor.getPhoneNumber(), message); }) .collect(Collectors.toList()); // Выводим SMS сообщения System.out.println("SMS сообщения для подписчиков:"); smsMessages.forEach(sms -> System.out.println("Номер: " + sms.getPhoneNumber() + " | Сообщение: " + sms.getMessage()) ); } }