Вопрос проверяет понимание лямбда-выражений в Java, их синтаксиса и применения для написания более краткого и функционального кода.
Лямбда-выражения — это одна из ключевых возможностей Java 8, которая привнесла элементы функционального программирования в язык. Они представляют собой анонимные функции, которые можно передавать как аргументы методам или сохранять в переменных. Основная цель — сделать код более лаконичным и выразительным, особенно при работе с операциями над коллекциями, где ранее требовались громоздкие анонимные классы.
Лямбда-выражение состоит из списка параметров, стрелки (->) и тела. Параметры могут быть без типов, если их можно вывести из контекста. Тело может быть одним выражением или блоком кода в фигурных скобках. Например:
// Простое лямбда-выражение для сложения
BinaryOperator add = (a, b) -> a + b;
// Лямбда с телом-блоком
Runnable task = () -> {
System.out.println("Запуск задачи");
// Дополнительная логика
};Лямбда-выражения работают только с функциональными интерфейсами — интерфейсами, имеющими ровно один абстрактный метод (например, Runnable, Comparator, Predicate). Компилятор Java сопоставляет лямбду с этим методом. Это позволяет использовать лямбды везде, где ожидается функциональный интерфейс.
// Пример с Predicate: фильтрация списка
List names = Arrays.asList("Alice", "Bob", "Charlie");
List filtered = names.stream()
.filter(name -> name.startsWith("A")) // Лямбда для Predicate
.collect(Collectors.toList()); // Результат: ["Alice"]Лямбды широко используются в Streams API для обработки данных, в многопоточности с ExecutorService, а также в обработчиках событий в GUI. Они сокращают объём шаблонного кода и улучшают читаемость. Например, сортировка списка:
List numbers = Arrays.asList(5, 2, 9, 1);
// Сортировка с лямбдой вместо анонимного Comparator
numbers.sort((a, b) -> a.compareTo(b));
// Или ещё короче с метод reference:
numbers.sort(Integer::compareTo);Вывод: Лямбда-выражения стоит применять для упрощения кода, особенно при работе с коллекциями, потоками данных (Streams) и асинхронными задачами, где они заменяют громоздкие анонимные классы и делают логику более явной.