Ответ
Лямбда-выражения в Java (с версии 8+) — это краткая форма записи анонимных функций, реализующих единственный абстрактный метод функционального интерфейса. Они позволяют писать более компактный и выразительный код, особенно в контексте Stream API и обработки коллекций.
Синтаксис: (параметры) -> { тело } или (параметры) -> выражение.
Примеры:
// 1. Сортировка списка с помощью лямбды
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((a, b) -> a.compareTo(b));
// 2. Использование с Stream API
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
List<Integer> squares = numbers.stream()
.map(n -> n * n) // Лямбда как Function
.collect(Collectors.toList()); // [1, 4, 9, 16, 25]
// 3. Запуск потока (Runnable)
new Thread(() -> System.out.println("Запуск из лямбды")).start();
Ключевые особенности:
- Целевой тип: Тип лямбды определяется из контекста (ожидаемый функциональный интерфейс:
Comparator,Predicate,Function,Consumerи т.д.). - Захват переменных: Лямбда может использовать
effectively finalпеременные из окружающей области видимости (локальные переменные, которые не изменяются после инициализации). - Ссылки на методы: Часто могут быть заменены на более лаконичные ссылки на методы (
String::compareTo,System.out::println).
Функциональные интерфейсы (пакет java.util.function) — основа для лямбд:
Predicate<T>— проверка условия (t -> t > 5).Function<T,R>— преобразование объекта (s -> s.length()).Consumer<T>— выполнение действия (obj -> System.out.println(obj)).Supplier<T>— поставщик значения (() -> new Object()).