Что такое «лямбда»? Какова структура и особенности использования лямбда-выражения?Лямбда представляет собой набор инструкций, которые можно выделить в отдельную переменную и затем многократно вызвать в различных местах программы.Основу лямбда-выражения составляет лямбда-оператор, который представляет стрелку ->. Этот оператор разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая собственно представляет тело лямбда-выражения, где выполняются все действия.Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.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) лямбда-выражения- определяется один раз в одном месте программы, вызываются при необходимости, любое количество раз и в произвольном месте программы.Параметры лямбда-выражения должны соответствовать по типу параметрам метода функционального интерфейса:operation = (int x, int y) -> x + y;//При написании самого лямбда-выражения тип параметров разрешается не указывать:(x, y) -> x + y;//Если метод не принимает никаких параметров, то пишутся пустые скобки, например:() -> 30 + 20;//Если метод принимает только один параметр, то скобки можно опустить:n -> n * n;Конечные лямбда-выражения не обязаны возвращать какое-либо значение.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:Operationable operation = (int x, int y) -> { if (y == 0) { return 0; } else { return x / y; }};Передача лямбда-выражения в качестве параметра метода: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));} 👉@BookJava