تعبيرات جافا لامدا
تعبيرات جافا لامدا
تمت إضافة تعبيرات Lambda في Java 8.
تعبير lambda عبارة عن كتلة قصيرة من التعليمات البرمجية تأخذ المعلمات وتعيد قيمة. تتشابه تعبيرات Lambda مع الأساليب ، لكنها لا تحتاج إلى اسم ويمكن تنفيذها في جسم الطريقة مباشرةً.
بناء الجملة
يحتوي أبسط تعبير لامدا على معامل واحد وتعبير:
parameter -> expression
لاستخدام أكثر من معلمة ، قم بلفها بين قوسين:
(parameter1, parameter2) -> expression
التعبيرات محدودة. يجب عليهم إرجاع قيمة على الفور ، ولا يمكن أن تحتوي على متغيرات أو تعيينات أو عبارات مثل if
أو for
. من أجل القيام بعمليات أكثر تعقيدًا ، يمكن استخدام كتلة التعليمات البرمجية مع الأقواس المتعرجة. إذا احتاج تعبير lambda إلى إرجاع قيمة ، فيجب أن تحتوي كتلة التعليمات البرمجية على return
عبارة.
(parameter1, parameter2) -> { code block }
استخدام تعبيرات لامدا
عادةً ما يتم تمرير تعبيرات Lambda كمعلمات إلى دالة:
مثال
استخدم تعبير لامبا في طريقة ArrayList
's forEach()
لطباعة كل عنصر في القائمة:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
يمكن تخزين تعبيرات Lambda في متغيرات إذا كان نوع المتغير واجهة لها طريقة واحدة فقط. يجب أن يحتوي تعبير lambda على نفس عدد المعلمات ونفس نوع الإرجاع مثل تلك الطريقة. تحتوي Java على العديد من هذه الأنواع من الواجهات المضمنة ، مثل Consumer
الواجهة (الموجودة في java.util
الحزمة) التي تستخدمها القوائم.
مثال
استخدم واجهة Java Consumer
لتخزين تعبير lambda في متغير:
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
لاستخدام تعبير lambda في طريقة ما ، يجب أن تحتوي الطريقة على معلمة بواجهة أحادية الطريقة كنوعها. سيؤدي استدعاء طريقة الواجهة إلى تشغيل تعبير lambda:
مثال
أنشئ عملية تأخذ تعبير lambda كمعامل:
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}