Лямбда-выражения Java
Лямбда-выражения Java
Лямбда-выражения были добавлены в Java 8.
Лямбда-выражение — это короткий блок кода, который принимает параметры и возвращает значение. Лямбда-выражения похожи на методы, но им не нужно имя, и их можно реализовать прямо в теле метода.
Синтаксис
Самое простое лямбда-выражение содержит один параметр и выражение:
parameter -> expression
Чтобы использовать более одного параметра, заключите их в круглые скобки:
(parameter1, parameter2) -> expression
Выражения ограничены. Они должны немедленно возвращать значение и не могут содержать переменные, присваивания или операторы, такие как if
или for
. Для выполнения более сложных операций можно использовать блок кода с фигурными скобками. Если лямбда-выражение должно возвращать значение, то в блоке кода должен быть return
оператор.
(parameter1, parameter2) -> { code block }
Использование лямбда-выражений
Лямбда-выражения обычно передаются функции в качестве параметров:
Пример
Используйте лямба-выражение в ArrayList
методе 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); } );
}
}
Лямбда-выражения могут храниться в переменных, если тип переменной является интерфейсом, который имеет только один метод. Лямбда-выражение должно иметь то же количество параметров и тот же тип возвращаемого значения, что и этот метод. Java имеет множество встроенных интерфейсов такого типа, например, Consumer
интерфейс (находящийся в java.util
пакете), используемый списками.
Пример
Используйте интерфейс Java Consumer
для хранения лямбда-выражения в переменной:
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 );
}
}
Чтобы использовать лямбда-выражение в методе, метод должен иметь параметр с интерфейсом одного метода в качестве типа. Вызов метода интерфейса запустит лямбда-выражение:
Пример
Создайте метод, который принимает лямбда-выражение в качестве параметра:
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);
}}