/
Letta21
/
HomeWork
Обзор
Документация
Войти
/
Letta21
/
HomeWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Main.java
98 строк
5 KB
Letta21
upload files
02 дек 2025, 16:27
02 дек 2025, 16:27
9e17ad9
Код
Авторство
О чём код?
import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) { //Задача 1: Калькулятор Calculator calc = Calculator.instance.get(); int a = calc.plus.apply(1, 2); int b = calc.minus.apply(1, 1); int c = calc.devide.apply(a, b); calc.println.accept(c); // Изначальный код: BinaryOperator<Integer> devide = (x, y) -> x / y; // Причина ошибки: При делении на 0 в Java выбрасывается исключение ArithmeticException. // В примере из задачи переменная b вычисляется как 1 - 1 = 0. // Затем происходит деление a / b (3 / 0), что приводит к падению программы. // Способ решения: Добавить проверку делителя на 0 с помощью тернарного оператора. // Если y == 0, возвращаем 0 (или Integer.MAX_VALUE, в зависимости от бизнес-логики), иначе делим. // public BinaryOperator<Integer> devide = (x, y) -> y == 0 ? 0 : x / y; //Задача 2: Работяга OnTaskDoneListener listener = System.out::println; Worker worker = new Worker(listener); worker.start(); //Задача 3: Работа с числами List<Integer> intList = Arrays.asList(1, 2, 5, 16, -1, -2, 0, 32, 3, 5, 8, 23, 4); List<Integer> result = new ArrayList<>(); for (Integer x : intList) { if (x > 0 && x % 2 == 0) { result.add(x); } } Collections.sort(result); for (Integer x : result) { System.out.println(x); } //Задача 4: Перепись населения List<String> names = Arrays.asList("Jack", "Connor", "Harry", "George", "Samuel", "John"); List<String> families = Arrays.asList("Evans", "Young", "Harris", "Wilson", "Davies", "Adamson", "Brown"); Collection<Person> persons = new ArrayList<>(); for (int i = 0; i < 10_000_000; i++) { persons.add(new Person( names.get(new Random().nextInt(names.size())), families.get(new Random().nextInt(families.size())), new Random().nextInt(100), Sex.values()[new Random().nextInt(Sex.values().length)], Education.values()[new Random().nextInt(Education.values().length)]) ); } // Найти количество несовершеннолетних (младше 18 лет) long count = persons.stream() .filter(person -> person.getAge() < 18) // Оставляем только тех, кому меньше 18 .count(); // System.out.println("Количество несовершеннолетних: " + count); // Получить список фамилий призывников (мужчины от 18 до 27 лет) List<String> conscripts = persons.stream() .filter(person -> person.getSex() == Sex.MAN) // Только мужчины .filter(person -> person.getAge() >= 18 && person.getAge() < 27) // От 18 до 27 (не включительно) .map(Person::getFamily) // Преобразуем Stream<Person> в Stream<String> (берем только фамилию) .collect(Collectors.toList()); // Собираем результат в список // Выведем количество System.out.println("Количество призывников: " + conscripts.size()); // Получить отсортированный по фамилии список потенциально работоспособных людей с высшим образованием // (от 18 до 60 для женщин и до 65 для мужчин) List<Person> workers = persons.stream() .filter(person -> person.getEducation() == Education.HIGHER) // Только с высшим образованием .filter(person -> person.getAge() >= 18) // От 18 лет .filter(person -> { if (person.getSex() == Sex.WOMAN) { return person.getAge() < 60; } else { return person.getAge() < 65; } }) .sorted(Comparator.comparing(Person::getFamily)) // Сортировка по фамилии .collect(Collectors.toList()); // Собираем в список // Выведем количество найденных людей System.out.println("Количество работоспособных с высшим образованием: " + workers.size()); } }