פרסומת
אם אתה מתכנת ג'אווה ואתה מעוניין ללמוד עוד אודות Java 8 lambdas, במאמר זה נבחן מקרוב את תחביר הלמדה והשימוש בו.
א ביטוי למבדה ב- Java היא דרך תמציתית לבטא שיטה של כיתה בביטוי. יש לו רשימת פרמטרים וגוף. הגוף יכול להיות יחיד ביטוי או חסימה 10 מושגי ג'אווה ליבה שעליכם ללמוד כאשר אתם מתחיליםבין אם אתה כותב ממשק משתמש (GUI), פיתוח תוכנה בצד השרת, או יישום נייד באמצעות אנדרואיד, לימוד ג'אווה ישמש אותך היטב. להלן כמה מושגי Java בסיסיים שיעזרו לך להתחיל בעבודה. קרא עוד . משתמשים בו בדרך כלל במקום בו נדרש יישום של ממשק. צורך זה מתעורר בדרך כלל כאשר נדרש ממשק כטיעון כדי להפעיל שיטה.
כמה ביטויים למבדה פשוטים
הבה נבחן כמה דוגמאות פשוטות לביטויי למבדה.
להלן ביטוי למבדה המקבל שני מספרים איקס ו y ומחשב את הסכום.
(int x, int y) -> x + y;
שחרר את סוגי הפרמטרים לקבלת ייצוג תמציתי יותר:
(x, y) -> x + y;
הגדר פונקציה שאינה מקבלת פרמטרים:
() -> 404;
להלן התקפות שאינן מקבלות שום פרמטרים ומחזירות דבר:
() -> {}
אין צורך בפרנטות המקיפות פרמטרים לפרמטר בודד:
x -> x + 1.
אפשר גם לחסום קוד מורכב יותר. הלמדה הבאה מקבלת יחיד קו פרמטר ועושה קצת עיבוד עליו. שים לב כי סוג הפרמטר נקבע מההקשר סביבו:
קו -> { מחרוזת [] x = תבנית. ספליט (קו); להחזיר נגן חדש (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
קידוד נקי ותמציתי
השימוש בביטויי למבדה עוזר להפוך את הקוד לנקי ותמציתי. כדי לסייע בכך, שיעורי Java 8 עושים שימוש נרחב ב- lambdas.
משתרע מעל רשימה או סט
שיעורי אוסף כגון רשימה, הגדר, תור, וכאלה ליישם את בלתי נשלט ממשק שמקל על הלופינג על האלמנטים הרבה יותר קל.
הכרז על רשימת שמות.
רשימה names = Arrays.asList ("ג'ו", "ג'ק", "ג'יימס", "אלברט");
לולאה מעל הרשימה ללא lambda:
עבור (שם מחרוזת: שמות) {System.out.println (שם); }
באמצעות lambda ניתן לכתוב את הלולאה לעיל כ:
names.forEach (שם -> System.out.println (שם));
עם הפניות לשיטת Java 8, ניתן לכתוב את האמור לעיל ביתר דיוק כמו:
names.forEach (System.out:: println);
מתפתל מעל מפה
א מפה הוא מיפוי של מפתחות לערכים. לופינג מעל מפה כולל כרוך מעל כל אחד ממיפוי (מפתח, ערך). השווה כיצד להשתמש ב- lambdas לסיטוטציה זו.
ראשית הגדר מפה:
מפה 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 = a -> a + 1;
סוג החזרה של ביטוי למבדה הוא ממשק פונקציונלי - ממשק בשיטה מופשטת אחת. ניתן להקצות ביטוי למבדה לממשק בשיטה מופשטת תואמת. כמה דוגמאות להלן.
יצירת משימה מרובת הליכי
שקול ליצור משימה עבור ביצוע בחוט נפרד 4 שיטות לכתיבת קוד רב-הברגה ב- Javaבמאמר זה, אנו משווים כמה אפשרויות לכתיבת קוד רב-הברגה ב- Java, כך שתוכל לשפוט טוב יותר באיזו אפשרות להשתמש לפרויקט Java הבא שלך. קרא עוד - אתה נדרש להגדיר את המשימה כ- ניתן לרוץ ממשק ויישום לרוץ () שיטה. כאן ניתן לרוץ הוא ממשק פונקציונלי.
MyTask בכיתה מיישם Runnable {... הפעלת חלל ציבורי () {// יישם את המשימה שלך כאן System.out.println ("רץ עכשיו בשרשור נפרד."); }... }
לאחר מכן תוכל ליצור מופע של ה- המשימה שלי שיעור ולהשתמש בו כדי להתחיל פתיל חדש של ביצוע.
משימת MyTask = MyTask חדשה (); פתיל אשכול = נושא חדש (משימה); thread.start ();
באמצעות למבה, תהליך יצירת א ניתן לרוץ הופך להרבה יותר קל. ניתן לכתוב מחדש את הגדרת המשימה לעיל:
משימה ריצה = () -> System.out.println ("רץ עכשיו בשרשור נפרד.");
או אפילו:
פתיל הברגה = נושא חדש (() -> System.out.println ("רץ עכשיו בשרשור נפרד.")); thread.start ();
השוואה באמצעות משווה
ה משווה הוא ממשק פונקציונלי להשוואה בין אובייקטים מסוג מסוים. היא מגדירה שיטה מופשטת אחת הנקראת השווה () שניתן להגדיר באמצעות ביטוי למבדה.
להלן ביטוי למבדה היוצר א משווה משמש להשוואה בין מחרוזות ללא רגישות.
משווה cmp = (x, y) -> x.compareToIgnoreCase (y);
פעם מופע של ה- משווה נוצר ממשק פונקציונאלי, ניתן להשתמש בו מחדש כנדרש.
כאן, אנו ממיינים רשימה של מחרוזות בסדר עולה.
רשימה names = Arrays.asList ("ג'ו", "ג'ק", "ג'יימס", "אלברט"); Collections.sort (שמות, cmp); names.forEach (System.out:: println); // הדפסים. אלברט. ג'ק. ג'יימס. ג'ו.
הרשימה למעלה ממוינת במקום. כעת אנו יכולים לחפש אותו באמצעות חיפוש בינארי() שיטה כדלקמן:
System.out.println ("חיפוש (ג'ו):" + Collections.binarySearch (שמות, "Joe", cmp)); # הדפסים. חיפוש (ג'ו): 3.
קל לחשב מקסימום ומינימום מהרשימה גם באמצעות lambdas.
הגדר כמה נתונים:
רשימה זמני = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
השתמש בביטוי lambda כדי להגדיר את המשווה:
משווה cmpTemp = (x, y) -> Integer.compare (x, y);
והדפיס את המקסימום והמינימום:
System.out.println ("מקסימום / דקה"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
השתמש בתכנות GUI
ביטויים למבדה שימושיים ביותר גם בתכנות GUI ליישום מטפלים באירועים. להלן דוגמה לשימוש במטפל בלחיצת כפתור.
כפתור JButton = JButton חדש ("לחץ עלי"); button.addActionListener (e -> System.out.println ("לחצו על הכפתור!"));
וזה היה מבט מהיר על השימוש ב- lambdas בג'אווה 8.
האם lambdas הקל את חייך מאז ג'אווה 8? אנא הסבר בתגובות למטה.