Reklama
Jeśli jesteś programistą Java i chcesz dowiedzieć się więcej o lambdach Java 8, w tym artykule przyjrzymy się bliżej składni i użyciu lambda.
ZA wyrażenie lambda w Javie to zwięzły sposób wyrażenia metody klasy w wyrażeniu. Ma listę parametrów i treść. Ciało może być jednym wyrażenie lub blok 10 podstawowych pojęć Java, których powinieneś nauczyć się na początkuNiezależnie od tego, czy piszesz GUI, rozwijasz oprogramowanie po stronie serwera, czy aplikację mobilną na Androida, nauka języka Java będzie Ci dobrze służyć. Oto kilka podstawowych koncepcji Java, które pomogą Ci zacząć. Czytaj więcej . Jest powszechnie stosowany tam, gdzie wymagana jest implementacja interfejsu. Potrzeba ta zwykle pojawia się, gdy wymagany jest interfejs jako argument do wywołania metody.
Kilka prostych wyrażeń lambda
Spójrzmy na kilka prostych przykładów wyrażeń lambda.
Poniżej znajduje się wyrażenie lambda, które akceptuje dwie liczby x i y i oblicza sumę.
(int x, int y) -> x + y;
Upuść typy parametrów, aby uzyskać bardziej zwięzłą reprezentację:
(x, y) -> x + y;
Zdefiniuj funkcję, która nie akceptuje parametrów:
() -> 404;
Obowiązuje również następujący kod, który nie przyjmuje żadnych parametrów i niczego nie zwraca:
() -> {}
Nie ma potrzeby nawiasów zawierających parametry dla jednego parametru:
x -> x + 1.
Możliwe są również bardziej złożone bloki kodu. Następująca lambda przyjmuje singiel linia parametr i wykonuje na nim pewne przetwarzanie. Zauważ, że typ parametru wywodzi się z otaczającego kontekstu:
linia -> { String [] x = pattern.split (linia); zwraca nowy odtwarzacz (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Czyste i zwięzłe kodowanie
Używanie wyrażeń lambda pomaga uczynić kod czystym i zwięzłym. Aby w tym pomóc, klasy Java 8 szeroko wykorzystują lambdy.
Pętla nad listą lub zestawem
Klasy kolekcji, takie jak Lista, Zestaw, Kolejkai takie wdrożenie Iterowalny interfejs, który znacznie ułatwia zapętlanie elementów.
Zadeklaruj listę nazwisk.
Lista names = Arrays.asList („Joe”, „Jack”, „James”, „Albert”);
Pętla nad listą bez lambda:
for (Nazwa ciągu: nazwy) {System.out.println (nazwa); }
Przy użyciu lambda powyższą pętlę można zapisać jako:
names.forEach (name -> System.out.println (name));
W przypadku odniesień do metod Java 8 powyższe można napisać jeszcze bardziej zwięźle, jako:
names.forEach (System.out:: println);
Pętla nad mapą
ZA Mapa to mapowanie kluczy na wartości. Pętla nad mapą obejmuje pętlę nad każdym z mapowań (klucz, wartość). Porównaj, w jaki sposób możesz użyć lambdas do tego situtation.
Najpierw zdefiniuj mapę:
Mapa map = new HashMap <> (); map.put („Atlanta, Georgia”, 110); map.put („Austin, Texas”, 115); map.put („Baltimore, Maryland”, 105); map.put („Birmingham, Alabama”, 99); map.put („Boston, Massachusetts”, 98);
Możesz przeglądać tę mapę w tradycyjny sposób:
dla (Mapa. Wejście e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }
Oto, jak możesz zrobić to samo w szybki i zwięzły sposób za pomocą lambdas:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Interfejsy funkcjonalne
Jaki jest typ zwracanego wyrażenia lambda? Innymi słowy, jaki jest typ X w poniższym stwierdzeniu?
X x = a -> a + 1;
Zwracanym typem wyrażenia lambda jest funkcjonalny interfejs - interfejs z jedną metodą abstrakcyjną. Możesz przypisać wyrażenie lambda do interfejsu zgodną metodą abstrakcyjną. Kilka przykładów poniżej.
Tworzenie zadania wielowątkowego
Rozważ utworzenie zadania dla wykonanie w osobnym wątku 4 metody pisania kodu wielowątkowego w JavieW tym artykule porównujemy kilka opcji pisania wielowątkowego kodu w Javie, abyś mógł lepiej ocenić, której opcji użyć do następnego projektu Java. Czytaj więcej - musisz zdefiniować zadanie jako Runnable interfejs i zaimplementuj biegać() metoda. Tutaj Runnable to funkcjonalny interfejs.
klasa MyTask implementuje Runnable {... public void run () {// zaimplementuj tutaj swoje zadanie System.out.println („Teraz działa w osobnym wątku.”); }... }
Następnie możesz utworzyć instancję pliku Moje zadanie klasy i użyj go, aby rozpocząć nowy wątek wykonania.
MyTask task = new MyTask (); Wątek wątku = nowy wątek (zadanie); thread.start ();
Przy użyciu lambda proces tworzenia Runnable staje się znacznie łatwiejsze. Powyższą definicję zadania można przepisać jako:
Runnable task = () -> System.out.println („Teraz działa w osobnym wątku.”);
Lub nawet:
Thread thread = new Thread (() -> System.out.println („Teraz działa w osobnym wątku.”)); thread.start ();
Porównanie za pomocą komparatora
The Komparator to funkcjonalny interfejs do porównywania obiektów danego typu. Definiuje pojedynczą abstrakcyjną metodę o nazwie porównać() które można zdefiniować za pomocą wyrażenia lambda.
Oto wyrażenie lambda tworzące Komparator używane do porównywania ciągów bez rozróżniania wielkości liter.
Komparator cmp = (x, y) -> x.compareToIgnoreCase (y);
Kiedyś wystąpienie Komparator funkcjonalny interfejs został utworzony, można go ponownie użyć w razie potrzeby.
Tutaj sortujemy listę ciągów w porządku rosnącym.
Lista names = Arrays.asList („Joe”, „Jack”, „James”, „Albert”); Kolekcje.sort (nazwy, cmp); names.forEach (System.out:: println); // drukuje. Albert. Jacek. James. Joe.
Powyższa lista jest posortowana na miejscu. Możemy teraz wyszukiwać za pomocą binarySearch () metoda w następujący sposób:
System.out.println („search (Joe):” + Collections.binarySearch (nazwy, „Joe”, cmp)); # wydruków. szukaj (Joe): 3.
Obliczanie maksimum i minimum z listy jest również łatwe przy użyciu lambdas.
Zdefiniuj niektóre dane:
Lista temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Użyj wyrażenia lambda, aby zdefiniować komparator:
Komparator cmpTemp = (x, y) -> Integer.compare (x, y);
I wydrukuj maksimum i minimum:
System.out.println („Max / Min”); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Użyj w programowaniu GUI
Wyrażenia lambda są również niezwykle przydatne w programowaniu GUI do implementacji programów obsługi zdarzeń. Oto przykład użycia modułu obsługi kliknięcia przycisku.
Przycisk JButton = nowy przycisk JButton („Click Me”); button.addActionListener (e -> System.out.println („Kliknięty przycisk!”));
I to było szybkie spojrzenie na użycie lambdas w Javie 8.
Czy lambda ułatwiły Ci życie od Java 8? Proszę wyjaśnić w komentarzach poniżej.