Что такое Lambda
Лямбда представляет собой набор инструкций, которые можно выделить в отдельную переменную и затем многократно вызвать в различных местах программы.
Основу лямбда-выражения составляет лямбда-оператор, который представляет стрелку ->. Этот оператор разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая, собственно, представляет тело лямбда-выражения, где выполняются все действия.
Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.
interface Operationable {
int calculate(int x, int y);
}
public static void main(String[] args) {
Operationable operation = (x, y) -> x + y;
int result = operation.calculate(10, 20);
System.out.println(result); //30
}По факту лямбда-выражения являются в некотором роде сокращенной формой внутренних анонимных классов, которые ранее применялись в Java.
-
Отложенное выполнение (deferred execution) лямбда-выражения- определяется один раз в одном месте программы, вызываются при необходимости, любое количество раз и в произвольном месте программы.
-
Параметры лямбда-выражения должны соответствовать по типу параметрам метода функционального интерфейса:
textoperation = (int x, int y) -> x + y; //При написании самого лямбда-выражения тип параметров разрешается не указывать: (x, y) -> x + y; //Если метод не принимает никаких параметров, то пишутся пустые скобки, например, () -> 30 + 20; //Если метод принимает только один параметр, то скобки можно опустить: n -> n * n;
- Конечные лямбда-выражения не обязаны возвращать какое-либо значение.
text
interface Printable { void print(String s); } public static void main(String[] args) { Printable printer = s -> System.out.println(s); printer.print("Hello, world"); } - Блочные лямбда-выражения обрамляются фигурными скобками. В блочных лямбда-выражениях можно использовать внутренние вложенные блоки, циклы, конструкции
if,switch, создавать переменные и т.д. Если блочное лямбда-выражение должно возвращать значение, то явным образом применяется операторreturn:textOperationable operation = (int x, int y) -> { if (y == 0) { return 0; } else { return x / y; } }; - Передача лямбда-выражения в качестве параметра метода:
text
interface Condition { boolean isAppropriate(int n); } private static int sum(int[] numbers, Condition condition) { int result = 0; for (int i : numbers) { if (condition.isAppropriate(i)) { result += i; } } return result; } public static void main(String[] args) { System.out.println(sum(new int[] {0, 1, 0, 3, 0, 5, 0, 7, 0, 9}, (n) -> n != 0)); }
Oct. 21, 2023, Источник
