-> (lambda)
Лямбда-выражение — короткая запись функции, которую можно передать как значение.
Доступно с: Java 8
Синтаксис
(parameters) -> expression
(parameters) -> { statements; }Примеры
Формы записи:
void main() {
Runnable hello = () -> IO.println("Hello");
Function<Integer, Integer> square = x -> x * x;
BinaryOperator<Integer> add = (a, b) -> a + b;
Function<String, String> shout = s -> {
String upper = s.toUpperCase();
return upper + "!";
};
hello.run();
IO.println(square.apply(5));
IO.println(add.apply(2, 3));
IO.println(shout.apply("hi"));
}Результат:
Hello
25
5
HI!Лямбда как аргумент метода:
void main() {
List<String> names = new ArrayList<>(List.of("Oleg", "Anna", "Ivan"));
names.sort((a, b) -> a.compareTo(b));
names.forEach(n -> IO.println("- " + n));
}Результат:
- Anna
- Ivan
- OlegПримечания
Лямбда всегда реализует функциональный интерфейс — интерфейс с одним абстрактным методом (Function, Predicate, Runnable, Comparator). Скобки вокруг единственного параметра и фигурные скобки вокруг одного выражения можно опустить. Внешние локальные переменные внутри лямбды доступны только для чтения: они должны быть фактически неизменяемыми (effectively final).
См. также
- :: (method reference) — Ссылка на метод — ещё более короткая замена лямбды, которая только вызывает метод.
- Function — Функция, которая принимает значение типа `T` и возвращает значение типа `R`.
- Predicate — Условие: функция, которая принимает значение и возвращает `boolean`.
- Consumer — Действие: принимает значение и ничего не возвращает.
В учебнике
- Лямбда-выражения — Лямбды в Java: запись функции как значения, формы синтаксиса, передача лямбд в методы и захват переменных.