Διαφήμιση
Εάν είστε προγραμματιστής Java και σας ενδιαφέρει να μάθετε περισσότερα για το Java 8 lambda, σε αυτό το άρθρο θα ρίξουμε μια πιο προσεκτική ματιά στη σύνταξη και τη χρήση lambda.
ΕΝΑ έκφραση λάμδα στην Java είναι ένας συνοπτικός τρόπος για να εκφράσετε μια μέθοδο μιας τάξης σε μια έκφραση. Έχει μια λίστα παραμέτρων και ένα σώμα. Το σώμα μπορεί να είναι ένα μόνο έκφραση ή ένα μπλοκ 10 βασικές έννοιες Java που πρέπει να μάθετε όταν ξεκινάτεΕίτε γράφετε ένα GUI, αναπτύσσετε λογισμικό από διακομιστή ή μια εφαρμογή για κινητά χρησιμοποιώντας Android, η εκμάθηση Java θα σας εξυπηρετήσει καλά. Ακολουθούν ορισμένες βασικές έννοιες Java που θα σας βοηθήσουν να ξεκινήσετε. Διαβάστε περισσότερα . Συνήθως χρησιμοποιείται όταν απαιτείται εφαρμογή διεπαφής. Αυτή η ανάγκη συνήθως προκύπτει όταν απαιτείται μια διεπαφή ως επιχείρημα για την επίκληση μιας μεθόδου.
Μερικές απλές εκφράσεις λάμδα
Ας δούμε μερικά απλά παραδείγματα των εκφράσεων λάμδα.
Το παρακάτω είναι μια έκφραση λάμδα που δέχεται δύο αριθμούς Χ και ε και υπολογίζει το άθροισμα.
(int x, int y) -> x + y;
Αποθέστε τους τύπους παραμέτρων για μια πιο περιεκτική αναπαράσταση:
(x, y) -> x + y;
Ορίστε μια συνάρτηση που δεν δέχεται παραμέτρους:
() -> 404;
Το παρακάτω ισχύει επίσης, το οποίο δεν δέχεται παραμέτρους και δεν επιστρέφει τίποτα:
() -> {}
Δεν χρειάζεται παράμετρος που να περικλείει παραμέτρους για μία μόνο παράμετρο:
x -> x + 1.
Είναι επίσης δυνατά πιο σύνθετα μπλοκ κώδικα. Το ακόλουθο λάμδα δέχεται ένα μόνο γραμμή παράμετρος και κάνει κάποια επεξεργασία σε αυτήν. Σημειώστε ότι ο τύπος της παραμέτρου συνάγεται από το περιβάλλον περιβάλλον:
γραμμή -> { Συμβολοσειρά [] x = pattern.split (γραμμή); επιστροφή νέου προγράμματος αναπαραγωγής (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Καθαρή και περιεκτική κωδικοποίηση
Η χρήση των εκφράσεων lambda συμβάλλει στον καθαρισμό και τη συνοχή του κώδικα. Για να το βοηθήσετε, τα μαθήματα Java 8 κάνουν εκτεταμένη χρήση των lambda.
Επανάληψη λίστας ή ενός συνόλου
Μαθήματα συλλογής όπως Λίστα, Σειρά, Ουρά, και τέτοια εφαρμόζουν το Επαληθεύσιμο διεπαφή που καθιστά το looping πάνω στα στοιχεία πολύ πιο εύκολο.
Δηλώστε μια λίστα ονομάτων.
Λίστα names = Arrays.asList ("Joe", "Jack", "James", "Albert");
Περάστε τη λίστα χωρίς λάμδα:
για (Όνομα συμβολοσειράς: ονόματα) {System.out.println (name); }
Χρησιμοποιώντας λάμδα, ο παραπάνω βρόχος μπορεί να γραφτεί ως:
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 {... public void run () {// υλοποιήστε την εργασία σας εδώ System.out.println ("Τρέχει σε ξεχωριστό νήμα τώρα."); }... }
Στη συνέχεια, μπορείτε να δημιουργήσετε μια παρουσία του MyTask τάξη και χρησιμοποιήστε το για να ξεκινήσετε ένα νέο νήμα εκτέλεσης.
Εργασία 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); // εκτυπώσεις. Αλβερτος. Γρύλος. Τζέιμς. Τζο.
Η παραπάνω λίστα ταξινομείται στη θέση της. Μπορούμε τώρα να το αναζητήσουμε χρησιμοποιώντας το binarySearch () μέθοδος ως εξής:
System.out.println ("search (Joe):" + Collections.binarySearch (ονόματα, "Joe", cmp)); # εκτυπώσεις. αναζήτηση (Joe): 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));
Χρήση στον προγραμματισμό GUI
Οι εκφράσεις Lambda είναι επίσης εξαιρετικά χρήσιμες στον προγραμματισμό GUI για την εφαρμογή χειριστών συμβάντων. Ακολουθεί ένα παράδειγμα χρήσης ενός χειριστηρίου κλικ στο κουμπί.
Κουμπί JButton = νέο JButton ("Click Me"); button.addActionListener (e -> System.out.println ("κλικ στο κουμπί!"));
Και αυτή ήταν μια γρήγορη ματιά στη χρήση lambdas στο Java 8.
Τα λάμδα έκαναν τη ζωή σας πιο εύκολη από το Java 8; Εξηγήστε στα παρακάτω σχόλια.