Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: lambda expression, functional interface, Java 8, anonymous class, method reference

Что такое лямбда-выражения в Java?

Вопрос проверяет понимание лямбда-выражений в Java, их синтаксиса и применения для написания более краткого и функционального кода.

Короткий ответ

Лямбда-выражения в Java — это краткий способ записи анонимных функций, появившийся в Java 8. Они позволяют передавать код как данные, упрощая работу с функциональными интерфейсами. Вместо создания анонимного класса можно написать (параметры) -> {тело}. Лямбды делают код более читаемым, особенно при использовании Streams API и коллекций.

Длинный ответ

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

Синтаксис и основы

Лямбда-выражение состоит из списка параметров, стрелки (->) и тела. Параметры могут быть без типов, если их можно вывести из контекста. Тело может быть одним выражением или блоком кода в фигурных скобках. Например:

// Простое лямбда-выражение для сложения
BinaryOperator add = (a, b) -> a + b;

// Лямбда с телом-блоком
Runnable task = () -> {
    System.out.println("Запуск задачи");
    // Дополнительная логика
};

Функциональные интерфейсы

Лямбда-выражения работают только с функциональными интерфейсами — интерфейсами, имеющими ровно один абстрактный метод (например, Runnable, Comparator, Predicate). Компилятор Java сопоставляет лямбду с этим методом. Это позволяет использовать лямбды везде, где ожидается функциональный интерфейс.

// Пример с Predicate: фильтрация списка
List names = Arrays.asList("Alice", "Bob", "Charlie");
List filtered = names.stream()
    .filter(name -> name.startsWith("A")) // Лямбда для Predicate
    .collect(Collectors.toList()); // Результат: ["Alice"]

Практическое применение

Лямбды широко используются в Streams API для обработки данных, в многопоточности с ExecutorService, а также в обработчиках событий в GUI. Они сокращают объём шаблонного кода и улучшают читаемость. Например, сортировка списка:

List numbers = Arrays.asList(5, 2, 9, 1);
// Сортировка с лямбдой вместо анонимного Comparator
numbers.sort((a, b) -> a.compareTo(b));
// Или ещё короче с метод reference:
numbers.sort(Integer::compareTo);

Вывод: Лямбда-выражения стоит применять для упрощения кода, особенно при работе с коллекциями, потоками данных (Streams) и асинхронными задачами, где они заменяют громоздкие анонимные классы и делают логику более явной.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Java

    Java

Ключевые слова

#lambda expression

#functional interface

#Java 8

#anonymous class

#method reference

Подпишись на Java Developer в телеграм