Java Lambda výrazy
Java Lambda výrazy
V Javě 8 byly přidány výrazy Lambda.
Výraz lambda je krátký blok kódu, který přebírá parametry a vrací hodnotu. Lambda výrazy jsou podobné metodám, ale nepotřebují název a lze je implementovat přímo do těla metody.
Syntax
Nejjednodušší výraz lambda obsahuje jeden parametr a výraz:
parameter -> expression
Chcete-li použít více než jeden parametr, zabalte je do závorek:
(parameter1, parameter2) -> expression
Výrazy jsou omezené. Musí okamžitě vrátit hodnotu a nemohou obsahovat proměnné, přiřazení nebo příkazy jako if
nebo for
. Aby bylo možné provádět složitější operace, lze blok kódu použít se složenými závorkami. Pokud výraz lambda potřebuje vrátit hodnotu, pak by měl mít blok kódu return
příkaz.
(parameter1, parameter2) -> { code block }
Použití lambda výrazů
Lambda výrazy jsou obvykle předávány jako parametry funkci:
Příklad
Pro tisk každé položky v seznamu použijte výraz lamba v metodě ArrayList
's :forEach()
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
Lambda výrazy mohou být uloženy v proměnných, pokud je typ proměnné rozhraní, které má pouze jednu metodu. Výraz lambda by měl mít stejný počet parametrů a stejný návratový typ jako tato metoda. Java má mnoho z těchto druhů rozhraní zabudovaných, jako je Consumer
rozhraní (najdete v java.util
balíčku) používané seznamy.
Příklad
Použijte Consumer
rozhraní Java k uložení výrazu lambda do proměnné:
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
Chcete-li v metodě použít výraz lambda, metoda by měla mít jako typ parametr s rozhraním jedné metody. Volání metody rozhraní spustí výraz lambda:
Příklad
Vytvořte metodu, která jako parametr vezme výraz lambda:
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}