Middle
Какви са лямбда изразите в Java и какви възможности предоставят?
sobes.tech AI
Отговор от AI
Изразът lambda в Java е анонимна функция, която не принадлежи към никакъв клас и може да бъде предадена като обект.
Синтаксис: (параметри) -> { тяло }
Възможности:
- Функционален интерфейс: Изразът lambda може да бъде присвоен на променлива от тип функционален интерфейс (интерфейс с един абстрактен метод).
// Функционален интерфейс @FunctionalInterface interface MyInterface { void myMethod(); } // Използване на лямбда израз MyInterface lambda = () -> System.out.println("Здравей от lambda!"); lambda.myMethod(); - Облекчаване на кода: Заменят анонимните вътрешни класове за реализиране на функционални интерфейси.
// Преди 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")); - Използване в Stream API: Интегрират се с API Stream за изпълнение на операции върху колекции.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Лямбда израз .forEach(System.out::println); // Методна референция (лямбда израз) - Отложено изпълнение: Кодът вътре в лямбда израза се изпълнява само при извикване на функционалния метод.
- Обхват на променливите: Лямбда изразите могат да улавят променливи от външната среда (локалните променливи трябва да са финални или ефективно финални).
| Предимство | Описание |
|---|---|
| Краткост на кода | Намалява "многословността" в сравнение с анонимните класове. |
| Подобрена четливост | Кодът става по-кратък и разбираем. |
| Паралелна обработка | Поддържа се от API Stream за паралелни операции. |