[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-chto-takoe-lyambda-vyrazhenie":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},335,"chto-takoe-lyambda-vyrazhenie",10,"java-8","Java 8+","☕","Что такое лямбда-выражение?","Лямбда-выражение — это компактная запись анонимной функции, которую можно присвоить переменной, передать в метод или вернуть как результат. Лямбда реализует единственный абстрактный метод функционального интерфейса, и по сути является краткой формой анонимного класса.\n\n> **Аналогия из жизни:** лямбда — это записка с инструкцией: «сделай вот это». Вы не создаёте отдельного работника (класс), а просто передаёте листок с заданием тому, кто его выполнит.\n\n### Структура лямбда-выражения\n\nОснову составляет лямбда-оператор `->`, который разделяет выражение на две части: слева — параметры, справа — тело.\n\n```java\n\u002F\u002F Полная форма\n(int x, int y) -> { return x + y; }\n\n\u002F\u002F Сокращённая форма (вывод типов, одно выражение)\n(x, y) -> x + y\n\n\u002F\u002F Без параметров\n() -> 42\n\n\u002F\u002F Один параметр — скобки необязательны\nn -> n * n\n```\n\n### Особенности использования\n\n- Тип параметров можно не указывать — компилятор выводит их из контекста\n- Если тело состоит из одного выражения, фигурные скобки и `return` опускаются\n- Лямбда не выполняется в момент объявления — это отложенное выполнение (deferred execution)\n- Лямбду можно передать в качестве параметра метода\n\n\u003Cdetails>\n\u003Csummary>Пример: лямбда как реализация функционального интерфейса\u003C\u002Fsummary>\n\n```java\ninterface Operationable {\n    int calculate(int x, int y);\n}\n\npublic static void main(String[] args) {\n    Operationable operation = (x, y) -> x + y;\n    int result = operation.calculate(10, 20);\n    System.out.println(result); \u002F\u002F 30\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Пример: блочная лямбда с return\u003C\u002Fsummary>\n\n```java\nOperationable operation = (int x, int y) -> {\n    if (y == 0) {\n        return 0;\n    } else {\n        return x \u002F y;\n    }\n};\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Пример: передача лямбды как параметра метода\u003C\u002Fsummary>\n\n```java\ninterface Condition {\n    boolean isAppropriate(int n);\n}\n\nprivate static int sum(int[] numbers, Condition condition) {\n    int result = 0;\n    for (int i : numbers) {\n        if (condition.isAppropriate(i)) {\n            result += i;\n        }\n    }\n    return result;\n}\n\npublic static void main(String[] args) {\n    System.out.println(\n        sum(new int[]{0, 1, 0, 3, 0, 5, 0, 7, 0, 9}, n -> n != 0)\n    );\n}\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** важно объяснить, что лямбда — не просто синтаксический сахар для анонимного класса. JVM реализует лямбды через `invokedynamic`, что позволяет избежать создания отдельного `.class`-файла. Также подчеркните связь лямбды с функциональными интерфейсами.","","junior",[15],"java8",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое лямбда-выражение? — Gymterview","Лямбда-выражение — это компактная запись анонимной функции, которую можно присвоить переменной, передать в метод или вернуть как результат. Лямбда реализует еди","Лямбда-выражение — это компактная запись анонимной функции, которую можно присвоить переменной, передать в метод или вер",[15,13],"Лямбда-выражение — это компактная запись анонимной функции, которую можно присвоить переменной, передать в метод или вернуть как результат. Лямбда реализует единственный абстрактный метод функционального интерфейса, и по сути является краткой формой анонимного класса.",true]