Что такое Consumer в Java и как его используют?

«Что такое Consumer в Java и как его используют?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Consumer<T> — это функциональный интерфейс из пакета java.util.function. Он представляет операцию, которая принимает один аргумент типа T и не возвращает результата (void).

Основное назначение: выполнение действий (побочных эффектов) над объектом, например, модификация, логирование или вывод.

Простой пример:

Consumer<String> printer = s -> System.out.println(s);
printer.accept("Hello, Consumer!"); // Выведет: Hello, Consumer!

Consumer<String> upperCasePrinter = str -> {
    String upper = str.toUpperCase();
    System.out.println(upper);
};
upperCasePrinter.accept("test"); // Выведет: TEST

Частое применение в Stream API:

List<String> names = Arrays.asList("Anna", "Bob", "Clara");
// forEach принимает Consumer
names.forEach(name -> System.out.println("Processing: " + name));

Композиция Consumers: метод andThen позволяет объединить несколько действий.

Consumer<String> log = s -> System.out.println("Log: " + s);
Consumer<String> notify = s -> System.out.println("Notifying about: " + s);

Consumer<String> fullPipeline = log.andThen(notify);
fullPipeline.accept("event");
// Вывод:
// Log: event
// Notifying about: event

Важно: Consumer предназначен именно для действий с побочными эффектами, а не для преобразования данных (для этого используется Function<T, R>).