Что такое Lambda в Java?
Лямбда-выражения в Java были представлены в версии Java 8 и позволяют писать компактный и выразительный код, особенно в случаях работы с коллекциями и функциональными интерфейсами. Лямбда-выражение — это краткий способ представления анонимных функций, которые можно передавать и использовать как объект.
Синтаксис лямбда-выражения состоит из трех частей: списка параметров, стрелочного оператора -> и тела выражения. Параметры заключаются в круглые скобки, за стрелкой указывается выполняемый код. Если код состоит из одной строки, фигурные скобки можно опустить.
- Улучшение читаемости кода, особенно в случаях работы с потоками (Streams).
- Уменьшение объема кода за счет отказа от анонимных классов для реализации функциональных интерфейсов.
- Гибкость в использовании методов коллекций, таких как
filter,mapиreduce.
import java.util.Arrays;
import java.util.List;
public class LambdaExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// Использование лямбда-выражения для вывода каждого элемента
names.forEach(name -> System.out.println(name));
// Фильтрация элементов с использованием лямбда-выражения
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
}
}
В примере выше лямбда-выражения используются для обработки списка строк. Метод forEach принимает лямбда-выражение, которое выводит каждый элемент списка. Также показан пример фильтрации элементов с помощью метода filter, где лямбда-выражение определяет условие фильтрации.
Важно отметить, что лямбда-выражения можно использовать только с функциональными интерфейсами. Функциональный интерфейс — это интерфейс с одним абстрактным методом, например Runnable, Comparator или пользовательский интерфейс, помеченный аннотацией @FunctionalInterface.
@FunctionalInterface
interface Greeting {
void sayHello(String name);
}
public class CustomLambda {
public static void main(String[] args) {
// Реализация через лямбда-выражение
Greeting greeting = name -> System.out.println("Hello, " + name);
greeting.sayHello("World");
}
}
Этот пример демонстрирует создание собственного функционального интерфейса и его использование с лямбда-выражением. Такая структура позволяет гибко описывать функциональность без необходимости явно создавать анонимные классы.