logo

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

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

Лямбда-вираз використовується для забезпечення реалізації інтерфейсу, який має функціональний інтерфейс. Це економить багато коду. У випадку лямбда-виразу нам не потрібно знову визначати метод для забезпечення реалізації. Тут ми просто пишемо код реалізації.

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

Функціональний інтерфейс

Лямбда-вираз забезпечує реалізацію функціональний інтерфейс . Інтерфейс, який має лише один абстрактний метод, називається функціональним інтерфейсом. Java надає анотацію @ Функціональний інтерфейс , який використовується для оголошення інтерфейсу як функціонального інтерфейсу.


Навіщо використовувати лямбда-вираз

  1. Забезпечити реалізацію функціонального інтерфейсу.
  2. Менше кодування.

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

 (argument-list) -> {body} 

Лямбда-вираз Java складається з трьох компонентів.

1) Список аргументів: Він також може бути порожнім або непорожнім.

2) Стрілка-жетон: Він використовується для зв’язку списку аргументів і тіла виразу.

3) Тіло: Він містить вирази та оператори для лямбда-виразу.

Синтаксис параметрів відсутній

 () -> { //Body of no parameter lambda } 

Синтаксис одного параметра

 (p1) -> { //Body of single parameter lambda } 

Синтаксис двох параметрів

 (p1,p2) -> { //Body of multiple parameter lambda } 

Давайте розглянемо сценарій, де ми не реалізуємо лямбда-вираз Java. Тут ми реалізуємо інтерфейс без використання лямбда-виразу.

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

 interface Drawable{ public void draw(); } public class LambdaExpressionExample { public static void main(String[] args) { int width=10; //without lambda, Drawable implementation using anonymous class Drawable d=new Drawable(){ public void draw(){System.out.println('Drawing '+width);} }; d.draw(); } } 
Перевірте зараз

Вихід:

 Drawing 10 

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

Тепер ми збираємося реалізувати наведений вище приклад за допомогою лямбда-виразу Java.

конвертувати рядок у json java
 @FunctionalInterface //It is optional interface Drawable{ public void draw(); } public class LambdaExpressionExample2 { public static void main(String[] args) { int width=10; //with lambda Drawable d2=()->{ System.out.println('Drawing '+width); }; d2.draw(); } } 
Перевірте зараз

Вихід:

 Drawing 10 

Лямбда-вираз може мати нуль або будь-яку кількість аргументів. Давайте подивимося на приклади:

Приклад лямбда-виразу Java: немає параметра

 interface Sayable{ public String say(); } public class LambdaExpressionExample3{ public static void main(String[] args) { Sayable s=()->{ return 'I have nothing to say.'; }; System.out.println(s.say()); } } 
Перевірте зараз

Вихід:

 I have nothing to say. 

Приклад лямбда-виразу Java: один параметр

 interface Sayable{ public String say(String name); } public class LambdaExpressionExample4{ public static void main(String[] args) { // Lambda expression with single parameter. Sayable s1=(name)->{ return 'Hello, '+name; }; System.out.println(s1.say('Sonoo')); // You can omit function parentheses Sayable s2= name ->{ return 'Hello, '+name; }; System.out.println(s2.say('Sonoo')); } } 
Перевірте зараз

Вихід:

 Hello, Sonoo Hello, Sonoo 

Приклад лямбда-виразу Java: кілька параметрів

 interface Addable{ int add(int a,int b); } public class LambdaExpressionExample5{ public static void main(String[] args) { // Multiple parameters in lambda expression Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Multiple parameters with data type in lambda expression Addable ad2=(int a,int b)->(a+b); System.out.println(ad2.add(100,200)); } } 
Перевірте зараз

Вихід:

 30 300 

Приклад лямбда-виразу Java: із ключовим словом return або без нього

У лямбда-виразі Java, якщо є лише один оператор, ви можете або не можете використовувати ключове слово return. Ви повинні використовувати ключове слово return, якщо лямбда-вираз містить кілька операторів.

 interface Addable{ int add(int a,int b); } public class LambdaExpressionExample6 { public static void main(String[] args) { // Lambda expression without return keyword. Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Lambda expression with return keyword. Addable ad2=(int a,int b)->{ return (a+b); }; System.out.println(ad2.add(100,200)); } } 
Перевірте зараз

Вихід:

 30 300 

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

 import java.util.*; public class LambdaExpressionExample7{ public static void main(String[] args) { List list=new ArrayList(); list.add('ankit'); list.add('mayank'); list.add('irfan'); list.add('jai'); list.forEach( (n)->System.out.println(n) ); } } 
Перевірте зараз

Вихід:

 ankit mayank irfan jai 

Приклад лямбда-виразу Java: кілька операторів

 @FunctionalInterface interface Sayable{ String say(String message); } public class LambdaExpressionExample8{ public static void main(String[] args) { // You can pass multiple statements in lambda expression Sayable person = (message)-> { String str1 = 'I would like to say, '; String str2 = str1 + message; return str2; }; System.out.println(person.say('time is precious.')); } } 
Перевірте зараз

Вихід:

 I would like to say, time is precious. 

Приклад лямбда-виразу Java: створення потоку

Ви можете використовувати лямбда-вираз для запуску потоку. У наступному прикладі ми реалізуємо метод run за допомогою лямбда-виразу.

 public class LambdaExpressionExample9{ public static void main(String[] args) { //Thread Example without lambda Runnable r1=new Runnable(){ public void run(){ System.out.println('Thread1 is running...'); } }; Thread t1=new Thread(r1); t1.start(); //Thread Example with lambda Runnable r2=()->{ System.out.println('Thread2 is running...'); }; Thread t2=new Thread(r2); t2.start(); } } 
Перевірте зараз

Вихід:

 Thread1 is running... Thread2 is running... 

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

Приклад лямбда-виразу Java: компаратор

 import java.util.ArrayList; import java.util.Collections; import java.util.List; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample10{ public static void main(String[] args) { List list=new ArrayList(); //Adding Products list.add(new Product(1,'HP Laptop',25000f)); list.add(new Product(3,'Keyboard',300f)); list.add(new Product(2,'Dell Mouse',150f)); System.out.println('Sorting on the basis of name...'); // implementing lambda expression Collections.sort(list,(p1,p2)->{ return p1.name.compareTo(p2.name); }); for(Product p:list){ System.out.println(p.id+' '+p.name+' '+p.price); } } } 
Перевірте зараз

Вихід:

 Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0 

Приклад лямбда-виразу Java: збір даних фільтра

 import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample11{ public static void main(String[] args) { List list=new ArrayList(); list.add(new Product(1,'Samsung A5',17000f)); list.add(new Product(3,'Iphone 6S',65000f)); list.add(new Product(2,'Sony Xperia',25000f)); list.add(new Product(4,'Nokia Lumia',15000f)); list.add(new Product(5,'Redmi4 ',26000f)); list.add(new Product(6,'Lenevo Vibe',19000f)); // using lambda to filter data Stream filtered_data = list.stream().filter(p -> p.price > 20000); // using lambda to iterate through collection filtered_data.forEach( product -> System.out.println(product.name+': '+product.price) ); } } 
Перевірте зараз

Вихід:

 Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0 

Приклад лямбда-виразу Java: Прослуховувач подій

 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class LambdaEventListenerExample { public static void main(String[] args) { JTextField tf=new JTextField(); tf.setBounds(50, 50,150,20); JButton b=new JButton('click'); b.setBounds(80,100,70,30); // lambda expression implementing here. b.addActionListener(e-> {tf.setText('hello swing');}); JFrame f=new JFrame(); f.add(tf);f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(null); f.setSize(300, 200); f.setVisible(true); } } 

Вихід:

Приклад обробки подій Java Lambda