Лямбда-выражения встречаются в разных языках программирования: JavaScript, PHP, C# и других. В этой статье поговорим о лямбда-выражениях в Java.
Лямбда-выражения или анонимные функции — это блоки кода с параметрами, которые можно вызвать из другого места программы. Они называются анонимными, потому что в отличие от функций, у них нет имён. Слово «лямбда» пришло из лямбда-исчисления, которое придумал профессор Алонзо Чёрч. Он использовал греческую букву лямбда (λ), чтобы отметить параметры.
Лямбда-выражения в Java
- Присутствуют начиная с 8 версии.
- Являются анонимными классами, реализующими метод функционального интерфейса.
- Имеют доступ только к final (или effectively final) переменным из охватывающей области видимости (для потокобезопасности).
- Не могут возвращать значение в каких-то ветках, а в других не возвращать.
- Позволяют уменьшить количество кода и повысить его читаемость.
Примеры синтаксиса лямбда-выражений в Java
Лямбда-выражения в Java состоят из параметров и стрелки —> отделяющей тело функции. Скобки нужны, если параметров 0 или больше одного. Для однострочных лямбд ключевое слово return
не обязательно.
(список параметров) -> тело лямбды
Без параметров
@FunctionalInterface
interface MyFunctionalInterface {
//метод без параметров
public String sayHello();
}
public class Example {
public static void main(String args[]) {
// лямбда выражение
MyFunctionalInterface msg = () -> {
return "Привет мир";
};
System.out.println(msg.sayHello());
}
}
Этот код выведет в консоль текст: «Привет мир!».
C параметром
import java.awt.*;
public class ButtonListenerNewWay {
public static void main(String[] args) {
Frame frame=new Frame("ActionListener java8");
Button b=new Button("Click Here");
b.setBounds(50,100,80,50);
b.addActionListener(e -> System.out.println("Привет мир!"));
frame.add(b);
frame.setSize(200,200);
frame.setLayout(null);
frame.setVisible(true);
}
}
В этом примере лямбда-выражение используется для обработки нажатия кнопки.
С несколькими параметрами
interface StringConcat {
public String sconcat(String a, String b);
}
public class Example {
public static void main(String args[]) {
StringConcat s = (str1, str2) -> str1 + str2;
System.out.println("Result: "+s.sconcat("Hello ", "World"));
}
}
Здесь лямбда-выражение склеивает строки.