Назад к вопросам
Middle
70
questionbank
Что такое лямбда-выражения в Java и какие возможности они предоставляют?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Лямбда-выражение в Java — это анонимная функция, которая не принадлежит какому-либо классу и может быть передана как объект.
Синтаксис: (параметры) -> { тело }
Возможности:
- Функциональный интерфейс: Лямбда-выражение может быть назначено переменной типа функционального интерфейса (интерфейса с одним абстрактным методом).
// Функциональный интерфейс @FunctionalInterface interface MyInterface { void myMethod(); } // Использование лямбда-выражения MyInterface lambda = () -> System.out.println("Hello from lambda!"); lambda.myMethod(); - Упрощение написания кода: Заменяют анонимные внутренние классы для реализации функциональных интерфейсов.
// До Java 8 (анонимный класс) Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Old way"); } }); // С Java 8 (лямбда) Thread thread2 = new Thread(() -> System.out.println("Lambda way")); - Использование в Stream API: Интегрируются с Stream API для выполнения операций над коллекциями.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Лямбда-выражение .forEach(System.out::println); // Лямбда-выражение (метод-ссылка) - Отложенное выполнение: Код внутри лямбда-выражения выполняется только при вызове функционального метода.
- Области видимости: Лямбда-выражения могут захватывать переменные из внешней области видимости (локальные переменные должны быть финальными или effectively final).
| Преимущество | Описание |
|---|---|
| Краткость кода | Уменьшает "многословность" по сравнению с анонимными классами. |
| Улучшенная читаемость | Код становится более лаконичным и понятным. |
| Параллельная обработка | Поддерживается Stream API для параллельных операций. |