Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: functional interface, Java, lambda, Predicate, Consumer, Function, Supplier

Какие стандартные функциональные интерфейсы существуют в Java?

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

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

Стандартные функциональные интерфейсы находятся в пакете java.util.function. Основные из них: Predicate (принимает объект, возвращает boolean), Consumer (принимает объект, ничего не возвращает), Function (принимает один тип, возвращает другой), Supplier (ничего не принимает, возвращает объект). Также есть BiFunction, UnaryOperator, BinaryOperator и другие. Они используются для передачи поведения в методы, особенно в Stream API.

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

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

Функциональный интерфейс в Java — это интерфейс, который содержит ровно один абстрактный метод. Такие интерфейсы служат типами для лямбда-выражений и ссылок на методы. Начиная с Java 8, в пакете java.util.function появился набор стандартных функциональных интерфейсов, покрывающих большинство типовых сценариев.

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

  • Predicate<T> — метод boolean test(T t). Используется для проверки условия. Пример: фильтрация элементов в Stream.
  • Consumer<T> — метод void accept(T t). Выполняет действие над объектом, не возвращая результат. Пример: вывод элементов в консоль.
  • Function<T, R> — метод R apply(T t). Преобразует объект одного типа в другой. Пример: извлечение поля из объекта.
  • Supplier<T> — метод T get(). Поставляет объект без входных параметров. Пример: фабрика объектов.

Примеры кода

import java.util.function.*;

public class FunctionalInterfacesExample {
    public static void main(String[] args) {
        // Predicate: проверка, что число положительное
        Predicate<Integer> isPositive = x -> x > 0;
        System.out.println(isPositive.test(5)); // true

        // Consumer: вывод строки
        Consumer<String> printer = s -> System.out.println(s);
        printer.accept("Hello"); // Hello

        // Function: длина строки
        Function<String, Integer> lengthFunc = s -> s.length();
        System.out.println(lengthFunc.apply("Java")); // 4

        // Supplier: случайное число
        Supplier<Double> randomSupplier = () -> Math.random();
        System.out.println(randomSupplier.get());
    }
}

Дополнительные интерфейсы

Кроме четырёх основных, есть их специализации: BiPredicate<T, U>, BiConsumer<T, U>, BiFunction<T, U, R>, а также UnaryOperator<T> (Function, где вход и выход одного типа) и BinaryOperator<T> (BiFunction с одинаковыми типами). Также существуют примитивные версии: IntPredicate, DoubleConsumer и т.д., которые избегают автоупаковки.

Применение

Эти интерфейсы активно используются в Stream API (например, filter принимает Predicate, map — Function, forEach — Consumer), в CompletableFuture, в Optional и при работе с коллекциями. Они позволяют писать более декларативный и лаконичный код.

Вывод: Стандартные функциональные интерфейсы — это основа функционального программирования в Java. Их знание необходимо для эффективной работы с лямбда-выражениями, Stream API и современными Java-библиотеками.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Java

    Java

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

#functional interface

#Java

#lambda

#Predicate

#Consumer

#Function

#Supplier

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