Ответ
Supplierjava.util.function, представляющий поставщика (генератора) значений. Он не принимает аргументов и возвращает объект типа T с помощью метода T get().
Основные сценарии применения:
-
Ленивая (отложенная) инициализация: Создание ресурсоемкого объекта только в момент вызова
get().Supplier<ExpensiveObject> supplier = () -> new ExpensiveObject(); // Объект еще не создан ExpensiveObject obj = supplier.get(); // Создание происходит здесь -
Генерация или предоставление значений: Например, поставка конфигурации, случайных данных или уникальных идентификаторов.
Supplier<String> uuidSupplier = () -> UUID.randomUUID().toString(); Supplier<Double> randomSupplier = Math::random; -
Интеграция со Stream API: Для создания бесконечных потоков данных с помощью
Stream.generate().Stream.generate(() -> "data").limit(5).forEach(System.out::println); -
Работа с Optional: Предоставление значения по умолчанию ленивым способом через
Optional.orElseGet().String value = optionalString.orElseGet(() -> fetchDefaultValue());
Ключевое преимущество: Supplier инкапсулирует логику получения значения, позволяя отложить его вычисление и легко подменять реализацию.