Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Wyrażenia lambda

  1. Czym są wyrażenia lambda
  2. Przykłady

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

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku