Table of Contents
Lamda Expressions
Τα lambda expressions (εκφράσεις lamda) στη Java είναι ένας τρόπος δημιουργίας ανώνυμων συναρτήσεων, οι οποίες μπορούν να χρησιμοποιηθούν σαν να ήταν αντικείμενα. Παρέχουν έναν σαφή και σύντομο τρόπο για την αναπαράσταση ενός interface που έχει μόνο μία μέθοδο(Functional Interface), χρησιμοποιώντας την έκφραση.
Σε αυτή την ενότητα θα δούμε τον τρόπο σύνταξης των εκφράσεων lamda.
Παράμετροι εκφράσεων lamda
Μηδενικές παράμετροι
() -> System.out.println("Lambda Function tutorial");
Μία παράμετρος
(x) -> x*x;
Δύο ή περισσότερες παράμετροι
(x,y) -> x*y + 20;
Το σώμα των εκφράσεων lamda
Εάν μία έκφραση lamda αποτελείται από μόνο μία εντολή τότε αυτή δεν χρειάζεται να περιέχεται μέσα σε άγκιστρα. Ομοίως δεν απαιτείται η εντολή return, καθώς η επιστρεφόμενη τιμή είναι το αποτέλεσμα της μοναδικής εντολής. Τα παραπάνω παραδείγματα είναι ενδεικτικά.
Εάν έχουμε περισσότερες από μία εντολές, όπως στο παράδειγμα της ενότητας με το interface CustomHasher, τότε οι εντολές περικλύονται σε άγκιστρα και η τελευταία εντολή θα πρέπει να είναι η εντολή return εφόσον υπάρχει επιστρεφόμενος τύπος. Για λόγους πληρότητας επαναλαμβάνουμε τον κώδικα εδώ.
- CustomHasher.java
@FunctionalInterface public interface CustomHasher<T> { public long hash(T t); }
- HashStudent.java
{ public class HashStudent { public static void main(String[] args) { Student mickey = new Student("Mickey", "Mouse"); CustomHasher<Student> hs = (s) -> { long value = 5381; for (char c : s.getLastName().toCharArray()) { value = ((value << 3) + value) + (int)c; } for (char c : s.getFirstName().toCharArray()) { value = ((value << 3) + value) + (int)c; } return value; }; System.out.println("Hash is: "+ hs.hash(mickey) ); } } }
H lamda έκφραση δεν αποτελεί απλά μία ανώνυμη συνάρτηση. Ορίζει ένα αντικείμενο που υλοποιεί το interface CustomHasher<Student>, το οποίο μπορεί στη συνέχεια να χρησιμοποιηθεί για να κληθεί η μοναδική μέθοδος που αυτό περιέχει.
Απαραίτητη προϋπόθεση για να χρησιμοποιήσετε μία lamda έκφραση είναι αυτή να ενέχει θέση υλοποίησης ενός Functional Interface (interface που έχει μόνο μία abstract συνάρτηση).
