ביטוי Lambda הוא תכונה חדשה וחשובה של Java שנכללה ב-Java SE 8. היא מספקת דרך ברורה ותמציתית לייצג ממשק שיטה אחד באמצעות ביטוי. זה מאוד שימושי בספריית האוסף. זה עוזר לשחזר, לסנן ולחלץ נתונים מהאיסוף.
ביטוי Lambda משמש כדי לספק יישום של ממשק בעל ממשק פונקציונלי. זה חוסך הרבה קוד. במקרה של ביטוי למבדה, אין צורך להגדיר שוב את השיטה למתן היישום. כאן, אנחנו פשוט כותבים את קוד היישום.
ביטוי Java lambda מטופל כפונקציה, כך שהמהדר לא יוצר קובץ .class.
ממשק פונקציונלי
ביטוי למבדה מספק יישום של ממשק פונקציונלי . ממשק שיש לו רק שיטה מופשטת אחת נקרא ממשק פונקציונלי. Java מספקת הערה @ ממשק פונקציונלי , המשמש להכרזה על ממשק כממשק פונקציונלי.
למה להשתמש ב-Lambda Expression
- לספק יישום של ממשק פונקציונלי.
- פחות קידוד.
תחביר ביטוי Java Lambda
(argument-list) -> {body}
ביטוי Java Lambda מורכב משלושה מרכיבים.
arraylist.sort
1) רשימת טיעונים: זה יכול להיות ריק או לא ריק גם כן.
2) אסימון חץ: הוא משמש לקישור ארגומנטים-רשימת וגוף הביטוי.
3) גוף: הוא מכיל ביטויים והצהרות לביטוי למבדה.
אין תחביר פרמטרים
() -> { //Body of no parameter lambda }
תחביר פרמטר אחד
מחרוזת משנה java
(p1) -> { //Body of single parameter lambda }
תחביר שני פרמטרים
(p1,p2) -> { //Body of multiple parameter lambda }
בואו נראה תרחיש שבו אנחנו לא מיישמים ביטוי Java lambda. כאן, אנו מיישמים ממשק מבלי להשתמש בביטוי lambda.
מערכים ב-java
ללא Lambda Expression
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
כעת, אנו הולכים ליישם את הדוגמה לעיל בעזרת ביטוי Java lambda.
@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 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 Loop
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: יצירת שרשור
אתה יכול להשתמש בביטוי למבדה כדי להפעיל חוט. בדוגמה הבאה, אנו מיישמים את שיטת הריצה באמצעות ביטוי lambda.
מחרוזת ל-Java בוליאני
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: Comparator
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); } }
תְפוּקָה: