[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-dlya-chego-nuzhny-funktsionalnye-interfeysy-predicate-doublepredicate-intpredicate-i-longpredicate":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},345,"dlya-chego-nuzhny-funktsionalnye-interfeysy-predicate-doublepredicate-intpredicate-i-longpredicate",10,"java-8","Java 8+","☕","Для чего нужны функциональные интерфейсы Predicate, DoublePredicate, IntPredicate и LongPredicate?","`Predicate\u003CT>` — функциональный интерфейс для проверки условия. Метод `test(T t)` принимает объект и возвращает `boolean`. Предикаты повсеместно используются в Stream API для фильтрации, а также в `Collection.removeIf()`, `Optional.filter()` и других методах.\n\n```java\nPredicate\u003CString> nonEmpty = s -> s.length() > 0;\nnonEmpty.test(\"foo\");          \u002F\u002F true\nnonEmpty.negate().test(\"foo\"); \u002F\u002F false\n```\n\n`default`-методы `and()`, `or()` и `negate()` позволяют комбинировать предикаты в сложные условия без написания громоздких лямбд.\n\nПримитивные специализации:\n\n| Интерфейс | Тип аргумента |\n|-----------|--------------|\n| `Predicate\u003CT>` | `T` |\n| `DoublePredicate` | `double` |\n| `IntPredicate` | `int` |\n| `LongPredicate` | `long` |\n\n> **На собеседовании:** полезно показать комбинирование предикатов: `predicate1.and(predicate2).or(predicate3)`. Это демонстрирует знание `default`-методов и функциональной композиции.","","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]