Что такое 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) лямбда-выражения- определяется один раз в одном месте программы, вызываются при необходимости, любое количество раз и в произвольном месте программы.
-
Параметры лямбда-выражения должны соответствовать по типу параметрам метода функционального интерфейса:
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)); }
Oct. 21, 2023, Источник
Lambda-выражения — это способ предоставления четкой и компактной формы для представления экземпляра функционального интерфейса. Функциональный интерфейс, напомню, это интерфейс с одним абстрактным методом. Эти выражения позволяют вам выполнять функциональное программирование, упрощая создание анонимных классов и делая код более читаемым и лаконичным.
Данное выражение состоит из списка параметров, символа стрелки `->` и тела выражения. Тело может быть выражением или блоком кода. Если тело выражения состоит из одного выражения, фигурные скобки необязательны, и значение выражения автоматически возвращается. Если тело содержит блок кода, он должен быть заключен в фигурные скобки, и вам может потребоваться использовать `return` для возврата значения (если метод не `void`).
Пример его использования:
List<String> names = Arrays.asList("John", "Jane", "Doe", "Sarah");
// Сортировка списка строк по длине с использованием lambda-выражения
Collections.sort(names, (String a, String b) -> a.length() - b.length());
names.forEach(name -> System.out.println(name));
В этом примере мы сначала сортируем список имен по длине с помощью такого выражения, переданного в метод `Collections.sort()`. Затем мы используем еще одно lambda-выражение с методом `forEach` для вывода всех имен в списке. Это показывает, как они могут сделать код более выразительным и избавить от необходимости явного создания анонимных классов для реализации интерфейсов с одним методом.
Lambda-выражения особенно полезны при работе с коллекциями и API потоков (Streams API), позволяя выполнять операции фильтрации, сортировки, преобразования и агрегирования коллекций данных с минимальным синтаксисом и усилиями.
Lambda-выражения — это компактный способ представления функционального интерфейса, который упрощает код и делает его более читаемым, особенно при работе с коллекциями и потоками данных.
Feb. 22, 2024, easyoffer