Обложка статьи «Лямбда-выражения в Java — что это такое, зачем нужны и как выглядят»

Лямбда-выражения в Java — что это такое, зачем нужны и как выглядят

Лямбда-выражения встречаются в разных языках программирования: 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"));
	}
}

Здесь лямбда-выражение склеивает строки.