> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-java/lyambda-vyrazheniya.md).

# Лямбда-выражения

Лямбда-выражения - это нововведение в языке Java, введенное в Java 8, которое позволяет создавать краткие анонимные функции (функциональные интерфейсы) прямо внутри кода. Лямбда-выражения представляют собой удобный способ передать функциональность в метод или другой код без необходимости создания отдельного класса.

Основные особенности лямбда-выражений в Java:

1. **Синтаксис**: Лямбда-выражения состоят из списка параметров, символа `->` (стрелка) и тела выражения. Синтаксис выглядит следующим образом: `(параметры) -> {тело_выражения}`.
2. **Типы параметров**: В большинстве случаев типы параметров можно опустить, так как компилятор Java способен вывести их автоматически из контекста. Например, `(x, y) -> x + y`.
3. **Интерфейсы функционального программирования**: Лямбда-выражения используются преимущественно с функциональными интерфейсами, которые содержат только один абстрактный метод. В Java 8 было введено множество предопределенных функциональных интерфейсов в пакете `java.util.function`, таких как `Predicate`, `Consumer`, `Supplier` и `Function`.
4. **Контексты использования**: Лямбда-выражения часто используются вместе с методами высшего порядка, такими как `map`, `filter`, `reduce` в потоках данных (Stream API), а также в других местах, где требуется передача функциональности как аргумента метода.

Пример использования лямбда-выражений в Java:

```java
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Создание списка чисел
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        // Пример использования лямбда-выражения с методом forEach
        numbers.forEach((number) -> System.out.println(number * 2));

        // Пример использования лямбда-выражения с методом removeIf
        numbers.removeIf((number) -> number % 2 == 0);

        // Вывод оставшихся чисел после удаления четных чисел
        numbers.forEach(System.out::println);
    }
}
```

В этом примере лямбда-выражение `(number) -> System.out.println(number * 2)` передается методу `forEach`, который выводит удвоенные значения чисел из списка. После этого используется лямбда-выражение `(number) -> number % 2 == 0`, переданное методу `removeIf`, который удаляет все четные числа из списка.
