Лямбда-выражения доступны начиная с Java SE 8. Помогают очень сильно сократить код, сделать его красивым и лаконичным.
Очень полезны в библиотеке коллекций. Помогают лаконично перебирать, фильтровать и извлекать данные из коллекции.
Лямбда-выражение Java хоть и похоже на экземпляр анонимного класса, но технически все же рассматривается как функция, так как компилятор не создает файл .class.
public static void run(String name) {
System.out.println(name + " is running...");
}static бессмысленно для него. Как и слова public или `private. Убираем лишнее и у нас остается... void run(String name) {
System.out.println(name + " is running...");
} void (String name) {
System.out.println(name + " is running...");
}void можно вывести автоматически, глядя на код метода, поэтому убираем void (String name) {
System.out.println(name + " is running...");
} (String name) -> {
System.out.println(name + " is running...");
}(список аргументов) -> {тело}Лямбда-выражение Java состоит из трех компонентов.
Список аргументов. Может быть пустым или непустым.
Стрелка. Просто условное обозначение
Тело. Содержит выражения и операторы для лямбда-выражения. Может быть в фигурных скобках или без них
Запуск нового потока по старому, без лямбды
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("Thread1 is running...");
}
});
t1.start();Теперь заменим все это длинное выражение, которое передается в параметрах в new Thread() на что-то более короткое
new Runnable() {
public void run() {
System.out.println("Thread1 is running...");
}
};Ведь, по большому счету, нам для запуска потока не нужно ни имя Runnable, ни название метода run, нужно просто передать набор команд, которые должны выполниться в новом потоке.
{
System.out.println("Thread1 is running...");
};Мы просто добавим к этому коду
() -> И в виде лямбды в итоге будет выглядеть так:
() -> {
System.out.println("Thread1 is running...");
};И в итоге, запуск потока с лямбдой выглядит очень лаконично:
Thread t2 = new Thread(() -> {
System.out.println("Thread2 is running...");
});
t2.start();