[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-dlya-chego-nuzhny-funktsionalnye-interfeysy-supplier-booleansupplier-doublesupplier-intsupplier-i-longsupplier":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},347,"dlya-chego-nuzhny-funktsionalnye-interfeysy-supplier-booleansupplier-doublesupplier-intsupplier-i-longsupplier",10,"java-8","Java 8+","☕","Для чего нужны функциональные интерфейсы Supplier, BooleanSupplier, DoubleSupplier, IntSupplier и LongSupplier?","`Supplier\u003CT>` — функциональный интерфейс, представляющий поставщика данных. Метод `get()` не принимает аргументов, но возвращает объект типа `T`. Supplier используется для отложенного (lazy) создания объектов, фабрик и генерации значений.\n\n```java\nSupplier\u003CLocalDateTime> now = LocalDateTime::now;\nnow.get(); \u002F\u002F текущее время в момент вызова\n```\n\nПримитивные специализации:\n\n| Интерфейс | Тип результата |\n|-----------|---------------|\n| `Supplier\u003CT>` | `T` |\n| `BooleanSupplier` | `boolean` |\n| `DoubleSupplier` | `double` |\n| `IntSupplier` | `int` |\n| `LongSupplier` | `long` |\n\n`Supplier` применяется в `Optional.orElseGet()`, `Stream.generate()`, `Objects.requireNonNull(obj, supplier)` и других местах, где создание значения нужно отложить до момента, когда оно действительно потребуется.\n\n> **На собеседовании:** важно объяснить концепцию отложенного вычисления. `Optional.orElse(expensiveCall())` вызывает метод всегда, а `Optional.orElseGet(() -> expensiveCall())` — только при отсутствии значения. Это ключевой пример полезности `Supplier`.","","junior",[15],"java8",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Для чего нужны функциональные интерфейсы ObjDoubleConsumer,  — Gymterview","Эти интерфейсы представляют операцию, принимающую два аргумента — объект типа `T` и примитив — и ничего не возвращающую. Они являются специализированными версия","Эти интерфейсы представляют операцию, принимающую два аргумента — объект типа `T` и примитив — и ничего не возвращающую.",[15,13],"Эти интерфейсы представляют операцию, принимающую два аргумента — объект типа `T` и примитив — и ничего не возвращающую. Они являются специализированными версиями `BiConsumer`, где второй аргумент — примитив, что позволяет избежать автобоксинга.",true]