В чём отличие 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