Назад к вопросам
Middle
70
questionbank

Что такое лямбда-выражения в Java и какие возможности они предоставляют?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Лямбда-выражение в Java — это анонимная функция, которая не принадлежит какому-либо классу и может быть передана как объект.

Синтаксис: (параметры) -> { тело }

Возможности:

  1. Функциональный интерфейс: Лямбда-выражение может быть назначено переменной типа функционального интерфейса (интерфейса с одним абстрактным методом).
    // Функциональный интерфейс  
    @FunctionalInterface  
    interface MyInterface {  
        void myMethod();  
    }  
    
    // Использование лямбда-выражения  
    MyInterface lambda = () -> System.out.println("Hello from lambda!");  
    lambda.myMethod();  
    
  2. Упрощение написания кода: Заменяют анонимные внутренние классы для реализации функциональных интерфейсов.
    // До 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"));  
    
  3. Использование в Stream API: Интегрируются с Stream API для выполнения операций над коллекциями.
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
    names.stream()  
         .filter(name -> name.startsWith("A")) // Лямбда-выражение  
         .forEach(System.out::println);        // Лямбда-выражение (метод-ссылка)  
    
  4. Отложенное выполнение: Код внутри лямбда-выражения выполняется только при вызове функционального метода.
  5. Области видимости: Лямбда-выражения могут захватывать переменные из внешней области видимости (локальные переменные должны быть финальными или effectively final).
Преимущество Описание
Краткость кода Уменьшает "многословность" по сравнению с анонимными классами.
Улучшенная читаемость Код становится более лаконичным и понятным.
Параллельная обработка Поддерживается Stream API для параллельных операций.