Baza Wiedzy

Wyrażenia lambda

Czym są wyrażenia lambda

Wyrażenia lambda w Javie mogą być stosowane w miejscach, w których oczekiwany jest argument typu będącego interfejsem funkcyjnym. Brzmi to skomplikowanie, ale najprościej wytłumaczyć to na przykładzie. Załóżmy, że chcemy posortować pewną kolekcję:

List<String> names = Arrays.asList("Kasia", "Ania", "Zosia", "Bartek");

Możemy w tym celu wykorzystać metodę sort() klasy Collections. Przyjmuje ona jako argumenty kolekcję do posortowania i komparator ustalający porządek:

Collections.sort(names, new Comparator<String>() {
	@Override
	public int compare(String o1, String o2) {
		return o1.compareToIgnoreCase(o2);
	}
});

Zapis taki jest trochę mało czytelny przez wykorzystanie klasy anonimowej. Interfejs Comparator jest jednak interfejsem funkcyjnym, posiada tylko jedną metodę abstrakcyjną compare(o1, o2) więc możemy sobie wyobrazić go jako funkcję, która przyjmuje dwa parametry i zwraca wartość typu int:

(String o1, String o2) -> int

W miejsce komparatora możemy więc wstawić wyrażenie lambda, które odpowiada sygnaturze takiej funkcji, np.:

(String s1, String s2) -> s1.compareToIgnoreCase(s2)

Kompilator jest w stanie w większości przypadków domyślić się typu argumentów na podstawie kontekstu, więc w rzeczywistości posłużyć się krótszym zapisem:

(s1, s2) -> s1.compareToIgnoreCase(s2)

Przykłady

package pl.javastart;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ComparatorLambdaExample {
	public static void main(String[] args) {
		List<String> names = Arrays.asList("Kasia", "Ania", "Zosia", "Bartek");
		//sortowanie aldabetyczne z uwzględnieniem wielkości liter
		Collections.sort(names, (s1, s2) -> s1.compareToIgnoreCase(s2));
		//metoda dorEach od Jav8 8 daje możliwości jak pętla for-each
		//oczekuje argumentu typu java.util.function.Consumer, czyli
		// (arg) -> void
		names.forEach(arg -> System.out.println(arg));
	}
}

przykład lambda

Przykład na Github

Zapisz się do newslettera

Otrzymuj nasz Newsletter z przykładowymi pytaniami rekrutacyjnymi, wyzwaniami programistycznymi i nowościami ze świata Javy, a także informacje o nowych kursach i promocjach.

Traktujemy Twoją prywatność poważnie. Nikomu nie udostępniamy Twojego maila no i zawsze możesz się wypisać.

Komentarze do artykułu

Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.

JavaStart na Youtube