الإعلانات

إذا كنت مبرمجًا في جافا وكنت مهتمًا بمعرفة المزيد حول Java 8 lambdas ، في هذه المقالة سنلقي نظرة فاحصة على بناء جملة لامدا واستخدامها.

أ تعبير لامدا في Java هي طريقة موجزة للتعبير عن طريقة فئة في تعبير. لديها قائمة من المعلمات وهيكل. يمكن أن يكون الجسم واحدًا تعبير أو كتلة 10 مفاهيم Java الأساسية يجب أن تتعلمها عند البدءسواء كنت تكتب واجهة مستخدم رسومية ، أو تقوم بتطوير برنامج من جانب الخادم ، أو تطبيق جوال باستخدام Android ، فإن تعلم Java سوف يخدمك بشكل جيد. فيما يلي بعض مفاهيم Java الأساسية لمساعدتك على البدء. قراءة المزيد . يتم استخدامه عادة عندما يكون تنفيذ الواجهة مطلوبًا. تنشأ هذه الحاجة عادة عندما تكون الواجهة مطلوبة كوسيطة لاستدعاء طريقة.

بعض تعابير لامدا البسيطة

دعونا نلقي نظرة على بعض الأمثلة البسيطة لتعابير لامدا.

فيما يلي تعبير لامدا يقبل رقمين س و ذ ويحسب المجموع.

(int x، int y) -> x + y ؛ 

إسقاط أنواع المعلمات للحصول على تمثيل أكثر إيجازًا:

(س ، ص) -> س + ص ؛ 

حدد وظيفة لا تقبل أي معلمات:

() -> 404; 

ما يلي صالح أيضًا ، والذي لا يقبل أي معلمات ولا يُرجع شيئًا:

() -> {}

لا حاجة للأقواس المتضمنة لمعلمات واحدة:

instagram viewer
س -> س +1. 

ممكن أيضا كتل رمز أكثر تعقيدا. تقبل لامدا التالية واحدة خط المعلمة ويقوم ببعض المعالجة عليه. لاحظ أنه يتم استنتاج نوع المعلمة من السياق المحيط:

سطر -> { String [] x = pattern.split (line) ، إرجاع المشغل الجديد (Integer.parseInt (x [0]) ، x [1] ، x [2] ، x [3] ، Integer.parseInt (x [4])) ؛ }

ترميز نظيف وموجز

يساعد استخدام تعبيرات لامدا في جعل كودك نظيفًا ومختصرًا. للمساعدة في ذلك ، تستخدم فئات Java 8 على نطاق واسع lambdas.

التكرار على قائمة أو مجموعة

فئات الجمع مثل قائمة, جلس, طابور، وتنفيذ مثل هذا متوقعة واجهة مما يجعل التكرار فوق العناصر أسهل بكثير.

قم بإعلان قائمة الأسماء.

قائمة names = Arrays.asList ("Joe"، "Jack"، "James"، "Albert")؛ 

حلقة فوق القائمة بدون لامدا:

عن (اسم السلسلة: أسماء) {System.out.println (name)؛ }

باستخدام لامدا ، يمكن كتابة الحلقة أعلاه على النحو التالي:

names.forEach (الاسم -> System.out.println (الاسم)) ؛ 

باستخدام مراجع طريقة Java 8 ، يمكن كتابة ما ورد أعلاه بشكل أكثر إيجازًا على النحو التالي:

names.forEach (System.out:: println) ؛ 

التكرار على الخريطة

أ خريطة تعيين مفاتيح القيم. يتضمن التكرار فوق خريطة التكرار فوق كل تعيين (مفتاح ، قيمة). قارن كيف يمكنك استخدام لامداس لهذه الحالة.

أولاً تحديد خريطة:

خريطة map = خريطة HashMap جديدة <> () ؛ map.put ("أتلانتا ، جورجيا" ، 110) ؛ map.put ("أوستن ، تكساس" ، 115) ؛ map.put ("بالتيمور ، ماريلاند" ، 105) ؛ map.put ("برمنغهام ، ألاباما" ، 99) ؛ map.put ("بوسطن ، ماساتشوستس" ، 98) ؛ 

يمكنك التكرار فوق هذه الخريطة بالطريقة التقليدية:

ل (الخريطة. دخول e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()) ؛ }

إليك كيفية القيام بنفس الشيء بطريقة سريعة ومختصرة باستخدام lambdas:

map.forEach ((k، v) -> System.out.println (k + "=>" + v)) ؛ 

واجهات وظيفية

ما هو نوع الإرجاع لتعبير لامدا؟ وبعبارة أخرى ، ما هو نوع X في البيان التالي؟

X x = a -> a + 1 ؛ 

نوع الإرجاع لتعبير لامدا هو واجهة وظيفية - السطح البيني بطريقة مجردة واحدة. يمكنك تعيين تعبير لامدا لواجهة باستخدام طريقة مجردة متوافقة. بعض الأمثلة أدناه.

إنشاء مهمة متعددة الخيوط

ضع في اعتبارك إنشاء مهمة لـ التنفيذ في موضوع منفصل 4 طرق لكتابة كود متعدد الخيوط في جافافي هذه المقالة ، نقارن بين عدد قليل من الخيارات لكتابة كود متعدد الخيوط في Java ، حتى تتمكن من الحكم بشكل أفضل على الخيار الذي تستخدمه لمشروع Java القادم. قراءة المزيد - أنت مطالب بتعريف المهمة على أنها قابل للجري واجهة وتنفيذ يركض() طريقة. هنا قابل للجري هي واجهة وظيفية.

class MyTask تنفذ Runnable {... تشغيل الفراغ العام () {// تنفيذ مهمتك هنا System.out.println ("قيد التشغيل في سلسلة محادثات منفصلة الآن.") ؛ }... }

يمكنك بعد ذلك إنشاء مثيل لـ مهمتي الفصل واستخدامه لبدء سلسلة تنفيذ جديدة.

مهمة MyTask = MyTask () جديدة ؛ خيط خيط = خيط جديد (مهمة) ؛ thread.start () ؛ 

باستخدام لامدا ، عملية إنشاء قابل للجري يصبح أسهل بكثير. يمكن إعادة كتابة تعريف المهمة أعلاه على النحو التالي:

Runnable task = () -> System.out.println ("قيد التشغيل في سلسلة محادثات منفصلة الآن.") ؛ 

او حتى:

خيط الموضوع = خيط جديد (() -> System.out.println ("قيد التشغيل في خيط منفصل الآن.")) ؛ thread.start () ؛ 

مقارنة باستخدام المقارنة

ال المقارنة هي واجهة وظيفية لمقارنة كائنات من نوع معين. يعرف طريقة مجردة واحدة تسمى قارن() والتي يمكن تعريفها باستخدام تعبير لامدا.

هنا تعبير لامدا يخلق المقارنة تُستخدم لمقارنة السلاسل بشكل غير حساس لحالة الأحرف.

المقارنة cmp = (x، y) -> x.compareToIgnoreCase (y) ؛ 

مرة واحدة على سبيل المثال المقارنة تم إنشاء واجهة وظيفية ، يمكن إعادة استخدامها على النحو المطلوب.

هنا ، نرتب قائمة من السلاسل بترتيب تصاعدي.

قائمة names = Arrays.asList ("Joe"، "Jack"، "James"، "Albert")؛ Collections.sort (الأسماء ، cmp) ؛ names.forEach (System.out:: println) ؛ // مطبوعات. ألبرت. جاك. جوامع. جو. 

القائمة أعلاه مرتبة في المكان. يمكننا الآن البحث باستخدام بحث ثنائي() الطريقة على النحو التالي:

System.out.println ("search (Joe):" + Collections.binarySearch (الأسماء ، "Joe" ، cmp)) ؛ # طبعات. بحث (جو): 3. 

يعد حساب الحد الأقصى والحد الأدنى من القائمة أمرًا سهلاً أيضًا باستخدام lambdas.

حدد بعض البيانات:

قائمة temps = Arrays.asList (110 ، 115 ، 105 ، 99 ، 98 ، 54 ، 109 ، 84 ، 81 ، 66 ، 72 ، 135 ، 115 ، 75 ، 82 ، 90 ، 88) ؛ 

استخدم تعبير لامدا لتعريف المقارنة:

المقارنة cmpTemp = (x، y) -> Integer.compare (x، y)؛ 

وطباعة الحد الأقصى والحد الأدنى:

System.out.println ("Max / Min") ؛ System.out.println (Collections.max (temps، cmpTemp) + "/" + Collections.min (temps، cmpTemp))؛ 

استخدم في برمجة واجهة المستخدم الرسومية

تعد تعبيرات Lambda مفيدة للغاية أيضًا في برمجة واجهة المستخدم الرسومية لتنفيذ معالجات الأحداث. فيما يلي مثال على استخدام معالج النقر فوق زر.

زر JButton = زر JButton الجديد ("Click Me") ؛ button.addActionListener (e -> System.out.println ("زر النقر!")) ؛ 

وكان ذلك نظرة سريعة على استخدام لامداس في جافا 8.

هل جعلت لامداس حياتك أسهل منذ جافا 8؟ يرجى توضيح في التعليقات أدناه.