Sobes.tech
Middle

Какви са лямбда изразите в Java и какви възможности предоставят?

sobes.tech AI

Отговор от AI

Изразът lambda в Java е анонимна функция, която не принадлежи към никакъв клас и може да бъде предадена като обект.

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

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

  1. Функционален интерфейс: Изразът lambda може да бъде присвоен на променлива от тип функционален интерфейс (интерфейс с един абстрактен метод).
    // Функционален интерфейс  
    @FunctionalInterface  
    interface MyInterface {  
        void myMethod();  
    }  
    
    // Използване на лямбда израз  
    MyInterface lambda = () -> System.out.println("Здравей от lambda!");  
    lambda.myMethod();  
    
  2. Облекчаване на кода: Заменят анонимните вътрешни класове за реализиране на функционални интерфейси.
    // Преди Java 8 (анонимен клас)  
    Thread thread1 = new Thread(new Runnable() {  
        @Override  
        public void run() {  
            System.out.println("Стар начин");  
        }  
    });  
    
    // От Java 8 нататък (lambda)  
    Thread thread2 = new Thread(() -> System.out.println("Начин lambda"));  
    
  3. Използване в Stream API: Интегрират се с API Stream за изпълнение на операции върху колекции.
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
    names.stream()  
         .filter(name -> name.startsWith("A")) // Лямбда израз  
         .forEach(System.out::println);        // Методна референция (лямбда израз)  
    
  4. Отложено изпълнение: Кодът вътре в лямбда израза се изпълнява само при извикване на функционалния метод.
  5. Обхват на променливите: Лямбда изразите могат да улавят променливи от външната среда (локалните променливи трябва да са финални или ефективно финални).
Предимство Описание
Краткост на кода Намалява "многословността" в сравнение с анонимните класове.
Подобрена четливост Кодът става по-кратък и разбираем.
Паралелна обработка Поддържа се от API Stream за паралелни операции.