W Java wyrażenie Lambda również często jest nazywane wyrażeniem inLine. Pozwala ono na prosty zapis funkcji w języki Java. To podejście jest wykorzystywane od Java w wersji 8.
Składnia ogólna wyrażenia Lambda
(parametry_funkcji) -> {ciało_metody}
Np.:
(int x, int y) -> {return x + y;}
Powyższe wyrażenie przyjmuje na wejściu wartości typu całkowitego, a następnie zwraca ich sumę.
Innym przykładem może być zastosowanie bardziej generycznego wyrażenia:
(x, y) -> {return x + y;}
Wówczas, w zależności od przyjmowanych parametrów wejściowych, otrzymujemy wynik. Mogą być to liczby całkowite, zmiennoprzecinkowe.
W tym przypadku nie wyklucza się również zmiennych typu String. Po takim zabiegu otrzymamy skonkatenowany łańcuch znaków.
Stosowanie wyrażeń lambda ma ogromną zaletę w programowaniu – oszczędzanie zapisanych linijek kodu.
Wyrażenie Lambda w Java – zaawansowane przykłady
Poniżej metoda, która przyjmuje listę osób oraz minimalny wiek, jaki muszą posiadać do ich wypisania. Zadanie jest banalnie proste, gdyż wystarczy jedna instrukcja warunkowa.
public static void printPersonsOlderThan(ArrayList roster, int age) { for (Person p : roster) { if (p.getAge() >= age) { p.printPerson(); } } }
Zadanie komplikuje się wtedy, kiedy nasza metoda zacznie przyjmować więcej kryteriów wymaganych do wypisania osób. Wtedy czeka nas długi blok instrukcji, w którym łatwo się jest pogubić.
public static void printPersonsOlderThan(ArrayList roster, int age, int height, int weight) { for (Person p : roster) { // problem 🙁 } }
Zbawieniem jest wyrażenie lambda, która upraszcza nam cały proces zadnia:
public static void printPersonsOlderThan(ArrayList<Person> roster, int age, int height, int weight) { roster.stream().filter(p -> p.getAge > age && p.getHeight > height && p.getWeight > weight) .forEach(Person::printPerson); }
Teraz już nie potrzebujemy używać nawet pętli foreach. Wystarczy, że na liście utworzymy obiekt p, który będzie spełniał powyższe 3 warunki. Wówczas zostaną zgromadzone tylko wyselekcjonowane elementy. Na tych elementach możemy bezpośrednio wywołać metodę printPerson, jak widać to powyżej.
Wyrażenie Lambda i programowanie funkcyjne w Java
W tym materiale wideo opowiadam w jaki sposób zacząć korzystać i praktykować programowanie funkcyjne za pomocą wyrażenia lambda od podstaw.