В чём отличие Supplier'а от Consumer'а

`Supplier` и `Consumer` являются функциональными интерфейсами, введёнными в Java 8 в рамках Stream API и пакета `java.util.function`. Они оба используются в лямбда-выражениях, методах ссылках и потоках данных, но служат разным целям и имеют противоположные действия.

Supplier

Представляет собой функциональный интерфейс, который поставляет результат заданного типа `T`. Интерфейс не принимает никаких аргументов, но возвращает значение типа `T`. Это может быть полезно, когда вам нужно лениво генерировать или поставлять значения, например, при создании новых объектов или выполнении операций, результат которых необходимо вернуть.

Пример использования Supplier:

Supplier<String> stringSupplier = () -> "Hello, World!";
System.out.println(stringSupplier.get()); // Выводит "Hello, World!"

Consumer

Это функциональный интерфейс, предназначенный для выполнения операции над объектом типа `T`. Он принимает один аргумент и не возвращает результат (возвращаемый тип `void`). Это полезно, когда вам нужно выполнить какое-либо действие или операцию над объектом, например, напечатать его, изменить его состояние и т.д., без возвращения какого-либо значения.

Пример использования Consumer:

Consumer<String> stringConsumer = s -> System.out.println(s);
stringConsumer.accept("Hello, World!"); // Выводит "Hello, World!"

Основное отличие между `Supplier` и `Consumer` заключается в их назначении и способе работы:

  • Supplier используется для получения или генерации данных без каких-либо входных параметров. Он «поставляет» данные.
  • Consumer используется для выполнения операций над данными, которые он принимает в качестве параметров, и не возвращает никакого результата. Он «потребляет» данные.

`Supplier` и `Consumer` представляют две разные операции: поставку данных и их потребление соответственно, что делает их важными компонентами для реализации функционального стиля программирования.

March 9, 2024, easyoffer