[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-dlya-chego-nuzhny-funktsionalnye-interfeysy-function-doublefunction-intfunction-i-longfunction":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},342,"dlya-chego-nuzhny-funktsionalnye-interfeysy-function-doublefunction-intfunction-i-longfunction",10,"java-8","Java 8+","☕","Для чего нужны функциональные интерфейсы Function, DoubleFunction, IntFunction и LongFunction?","`Function\u003CT, R>` — функциональный интерфейс, представляющий функцию, которая принимает аргумент типа `T` и возвращает результат типа `R`. Основной метод — `apply(T t)`. Интерфейс предоставляет `default`-методы `compose()` и `andThen()` для построения цепочек преобразований.\n\n```java\nFunction\u003CString, Integer> toInteger = Integer::valueOf;\nFunction\u003CString, String> backToString = toInteger.andThen(String::valueOf);\nbackToString.apply(\"123\"); \u002F\u002F \"123\"\n```\n\nПримитивные специализации позволяют избежать автобоксинга при работе с числовыми типами:\n\n| Интерфейс | Вход | Выход |\n|-----------|------|-------|\n| `Function\u003CT, R>` | `T` | `R` |\n| `DoubleFunction\u003CR>` | `double` | `R` |\n| `IntFunction\u003CR>` | `int` | `R` |\n| `LongFunction\u003CR>` | `long` | `R` |\n\nМетод `andThen()` позволяет выстроить конвейер: результат первой функции передаётся на вход второй. Метод `compose()` работает в обратном порядке — сначала выполняется переданная функция, затем текущая.\n\n> **На собеседовании:** помимо определения, стоит упомянуть `compose` и `andThen`, а также объяснить, зачем существуют примитивные специализации (избежание autoboxing для повышения производительности).","","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]