Лямбда-вираз в Java

Лямбда-вираз в Java

У Java лямбда-вирази в основному виражають екземпляри функціональних інтерфейсів (інтерфейс з одним абстрактним методом називається функціональним інтерфейсом). Лямбда-вирази в Java — це те саме, що лямбда-функції, які є коротким блоком коду, який приймає вхідні дані як параметри та повертає результуюче значення. Лямбда-вирази нещодавно включено до Java SE 8.

Функціональні можливості лямбда-виразу в Java

Лямбда-вирази реалізують єдину абстрактну функцію і, отже, реалізують функціональні інтерфейси Лямбда-вирази додаються в Java 8 і забезпечують наведені нижче функції.

  • Увімкніть обробку функцій як аргумент методу або код як дані.
  • Функція, яку можна створити, не належачи до жодного класу.
  • Лямбда-вираз можна передавати так, ніби це об’єкт, і виконувати на вимогу.

Приклад лямбда-виразу Java

Java
// Java program to demonstrate lambda expressions // to implement a user defined functional interface. // A sample functional interface (An interface with // single abstract method interface FuncInterface {  // An abstract function  void abstractFun(int x);  // A non-abstract (or default) function  default void normalFun()  {  System.out.println('Hello');  } } class Test {  public static void main(String args[])  {  // lambda expression to implement above  // functional interface. This interface  // by default implements abstractFun()  FuncInterface fobj = (int x)->System.out.println(2*x);  // Це викликає вищезгаданий лямбда-вираз і друкує 10. fobj.abstractFun(5);  } } 

Вихід
10 

лямбда-вираз Синтаксис лямбда-виразу

 lambda operator ->тіло 

Параметри лямбда-виразу

Нижче наведено три параметри лямбда-виразу:

  1. Нульовий параметр
  2. Єдиний параметр
  3. Кілька параметрів

1. Лямбда-вираз із нульовим параметром

() ->System.out.println('Нульовий параметр лямбда'); 

2. Лямбда-вираз з одним параметром

(p) ->System.out.println('Один параметр: ' + p); 

Використовувати дужки необов’язково, якщо тип цієї змінної можна визначити з контексту

Java
// A Java program to demonstrate simple lambda expressions import java.util.ArrayList; class Test {  public static void main(String args[])  {  // Creating an ArrayList with elements  // {1, 2, 3, 4}  ArrayList arrL = новий ArrayList ();  arrL.add(1);  arrL.add(2);  arrL.add(3);  arrL.add(4);  // Використання лямбда-виразу для друку всіх елементів // arrL arrL.forEach(n -> System.out.println(n));  // Використання лямбда-виразу для друку парних елементів // arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); });  } } 

Вихід
1 2 3 4 2 4 

Примітка: що лямбда-вирази можна використовувати лише для реалізації функціональних інтерфейсів. У наведеному вище прикладі також реалізується лямбда-вираз Споживач Функціональний інтерфейс.

3. Лямбда-вираз із кількома параметрами

(p1, p2) ->System.out.println('Кілька параметрів: ' + p1 + ', ' + p2); 

Програма Java для демонстрації роботи лямбда-виразу з двома аргументами.

Java
// Java program to demonstrate working of lambda expressions public class Test {  // operation is implemented using lambda expressions  interface FuncInter1 {  int operation(int a, int b);  }  // sayMessage() is implemented using lambda expressions  // above  interface FuncInter2 {  void sayMessage(String message);  }  // Performs FuncInter1's operation on 'a' and 'b'  private int operate(int a, int b, FuncInter1 fobj)  {  return fobj.operation(a, b);  }  public static void main(String args[])  {  // lambda expression for addition for two parameters  // data type for x and y is optional.  // This expression implements 'FuncInter1' interface  FuncInter1 add = (int x, int y) ->х + у;  // множення лямбда-виразу для двох // параметрів Цей вираз також реалізує // інтерфейс 'FuncInter1' FuncInter1 multiply = (int x, int y) -> x * y;  // Створення об’єкта Test для виклику оператора за допомогою // різних реалізацій за допомогою лямбда // Вирази Test tobj = new Test();  // Додайте два числа за допомогою лямбда-виразу System.out.println('Addition is ' + tobj.operate(6, 3, add));  // Множення двох чисел за допомогою лямбда-виразу System.out.println('Множення є ' + tobj.operate(6, 3, multiply));  // лямбда-вираз для одного параметра // Цей вираз реалізує інтерфейс 'FuncInter2' FuncInter2 fobj = message -> System.out.println('Hello ' + message);  fobj.sayMessage('Виродок');  } } 

Вихід
Addition is 9 Multiplication is 18 Hello Geek 

Примітка: Лямбда-вирази схожі на функції, і вони приймають параметри, як і функції.

Висновок

Нижче наведено кілька важливих пунктів із цієї статті:

  • Тіло лямбда-виразу може містити нуль, один або більше операторів.
  • Якщо є один оператор, фігурні дужки не є обов’язковими, а тип повернення анонімної функції такий самий, як і для виразу body.
  • Якщо існує більше одного оператора, вони повинні бути взяті у фігурні дужки (блок коду), а тип повернення анонімної функції такий самий, як і тип значення, що повертається в блоці коду, або недійсний, якщо нічого не повертається .

Поширені запитання щодо лямбда-виразу

Q1. Який тип лямбда-виразу Java?

відповідь:

Лямбда-вирази Java — це короткий блок коду, який приймає вхідні дані як параметри та повертає результуюче значення.

Q2. Чи добре використовувати лямбда-вирази в Java?

відповідь:

Так, використання лямбда-виразів полегшує використання та підтримку інших API.

Q3. Які недоліки Java lambda?

відповідь:

Лямбда-функції Java можна використовувати лише з функціональними інтерфейсами.

Q4. На основі щойно показаних правил синтаксису, що з наведеного нижче є/є НЕдійсним лямбда-виразом?

  1. () -> {}
  2. () -> geeksforgeeks
  3. () -> { return geeksforgeeks;}
  4. (Ціле i) -> повернути geeksforgeeks + i;
  5. (Рядок s) -> {geeksforgeeks;}

відповідь:

4 і 5 недійсні лямбда-вирази, решта дійсні. Подробиці:

  1. Ця лямбда не має параметрів і повертає void. Це схоже на метод із порожнім тілом: public void run() { }.
  2. Ця лямбда не має параметрів і повертає рядок як вираз.
  3. Ця лямбда не має параметрів і повертає рядок (використовуючи явний оператор return у блоці).
  4. return — оператор потоку керування. Щоб зробити цей лямбда дійсним, потрібні такі фігурні дужки: (Integer i) -> { return geeksforgeeks + i; }.
  5. гіки для гіків – це вираз, а не твердження. Щоб зробити цей лямбда дійсним, ви можете видалити фігурні дужки та крапку з комою таким чином: (Рядок s) -> geeks для geeks. Або, якщо хочете, ви можете використати явний оператор повернення таким чином: (String s) -> { return geeks for geeks; }.