يعد تعبير Lambda ميزة جديدة ومهمة في Java تم تضمينها في Java SE 8. وهو يوفر طريقة واضحة وموجزة لتمثيل واجهة أسلوب واحدة باستخدام التعبير. إنه مفيد جدًا في مكتبة المجموعة. فهو يساعد على تكرار البيانات وتصفيتها واستخراجها من المجموعة.
يتم استخدام تعبير Lambda لتوفير تنفيذ واجهة ذات واجهة وظيفية. أنه يوفر الكثير من التعليمات البرمجية. في حالة تعبير لامدا، لا نحتاج إلى تحديد الطريقة مرة أخرى لتوفير التنفيذ. هنا، نكتب فقط رمز التنفيذ.
يتم التعامل مع تعبير Java lambda كدالة، لذلك لا يقوم المترجم بإنشاء ملف .class.
واجهة وظيفية
يوفر تعبير Lambda إمكانية تنفيذ واجهة وظيفية . تسمى الواجهة التي تحتوي على طريقة مجردة واحدة فقط بالواجهة الوظيفية. توفر Java تعليقًا توضيحيًا @ الواجهة الوظيفية ، والذي يُستخدم لإعلان الواجهة كواجهة وظيفية.
لماذا نستخدم تعبير لامدا
- لتوفير تنفيذ الواجهة الوظيفية.
- ترميز أقل.
جافا لامدا بناء جملة التعبير
(argument-list) -> {body}
يتكون تعبير Java lambda من ثلاثة مكونات.
1) قائمة الحجج: ويمكن أن تكون فارغة أو غير فارغة كذلك.
2) رمز السهم: يتم استخدامه لربط قائمة الوسائط ونص التعبير.
3) الجسم: أنه يحتوي على تعبيرات وبيانات لتعبير لامدا.
لا يوجد بناء جملة المعلمة
() -> { //Body of no parameter lambda }
بناء جملة معلمة واحدة
(p1) -> { //Body of single parameter lambda }
بناء الجملة اثنين من المعلمات
(p1,p2) -> { //Body of multiple parameter lambda }
دعونا نرى سيناريو حيث لا نقوم بتنفيذ تعبير Java lambda. نحن هنا ننفذ واجهة دون استخدام تعبير لامدا.
بدون تعبير لامدا
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 lambda.
np.where
@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(); } }اختبره الآن
انتاج:
runas في بوويرشيل
Drawing 10
يمكن أن يحتوي تعبير لامدا على صفر أو أي عدد من الوسائط. دعونا نرى الأمثلة:
مثال تعبير Java Lambda: لا توجد معلمة
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 Lambda: معلمة واحدة
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 Lambda: معلمات متعددة
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 Lambda: مع أو بدون الكلمة الرئيسية للإرجاع
في تعبير Java lambda، إذا كان هناك عبارة واحدة فقط، فيمكنك أو لا تستخدم الكلمة الأساسية return. يجب عليك استخدام الكلمة الأساسية return عندما يحتوي تعبير lambda على عبارات متعددة.
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 Lambda: حلقة 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 Lambda: عبارات متعددة
@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 Lambda: إنشاء سلسلة رسائل
يمكنك استخدام تعبير لامدا لتشغيل الموضوع. في المثال التالي، نقوم بتنفيذ طريقة التشغيل باستخدام تعبير لامدا.
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 lambda في إطار عمل المجموعة. فهو يوفر طريقة فعالة وموجزة لتكرار البيانات وتصفيتها وجلبها. فيما يلي بعض أمثلة لامدا والمجموعة المقدمة.
مثال تعبير Java Lambda: المقارنة
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 Lambda: تصفية بيانات المجموعة
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 Lambda: مستمع الأحداث
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); } }
انتاج: