Middle
Τι είναι οι εκφράσεις lambda στη Java και ποιες δυνατότητες παρέχουν;
sobes.tech AI
Απάντηση από AI
Η έκφραση lambda στη Java είναι μια ανώνυμη λειτουργία που δεν ανήκει σε καμία κλάση και μπορεί να μεταβιβαστεί ως αντικείμενο.
Σύνταξη: (παραμέτρους) -> { σώμα }
Δυνατότητες:
- Λειτουργική διεπαφή: Η έκφραση lambda μπορεί να ανατεθεί σε μια μεταβλητή τύπου λειτουργικής διεπαφής (διεπαφή με μία μόνο αφηρημένη μέθοδο).
// Λειτουργική διεπαφή @FunctionalInterface interface MyInterface { void myMethod(); } // Χρήση της έκφρασης lambda MyInterface lambda = () -> System.out.println("Γειά από το lambda!"); lambda.myMethod(); - Απλοποίηση κώδικα: Αντικαθιστούν τις ανώνυμες εσωτερικές κλάσεις για την υλοποίηση λειτουργικών διεπαφών.
// Πριν από Java 8 (ανώνυμη κλάση) Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Παλιός τρόπος"); } }); // Από Java 8 και μετά (lambda) Thread thread2 = new Thread(() -> System.out.println("Τρόπος lambda")); - Χρήση στο Stream API: Ενσωματώνονται με το Stream API για εκτέλεση λειτουργιών σε συλλογές.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Έκφραση lambda .forEach(System.out::println); // Αναφορά μεθόδου (έκφραση lambda) - Αναβολή εκτέλεσης: Ο κώδικας μέσα στην έκφραση lambda εκτελείται μόνο όταν καλείται η λειτουργική μέθοδος.
- Περιοχή ορατότητας μεταβλητών: Οι εκφράσεις lambda μπορούν να καταγράφουν μεταβλητές από το εξωτερικό περιβάλλον (οι τοπικές μεταβλητές πρέπει να είναι τελικές ή αποτελεσματικά τελικές).
| Πλεονέκτημα | Περιγραφή |
|---|---|
| Συντομία κώδικα | Μειώνει την "πολυλογοσύνη" σε σύγκριση με τις ανώνυμες κλάσεις. |
| Βελτιωμένη αναγνωσιμότητα | Ο κώδικας γίνεται πιο συνοπτικός και κατανοητός. |
| Παράλληλη επεξεργασία | Υποστηρίζεται από το Stream API για παράλληλες λειτουργίες. |