Пакет java.util.function

Функциональные интерфейсы предоставляют целевые типы для лямбда-выражений и ссылок на методы. Каждый функциональный интерфейс имеет один абстрактный метод, называемый функциональным методом для этого функционального интерфейса, к которому подбираются или адаптируются параметр и тип возвращаемого значения лямбда-выражения. Функциональные интерфейсы могут предоставлять целевой тип в нескольких контекстах, таких как контекст присваивания, вызов метода или контекст приведения типа:

// Assignment context
     Predicate<String> p = String::isEmpty;

     // Method invocation context
     stream.filter(e -> e.getSize() > 10)...

     // Cast context
     stream.map((ToIntFunction) e -> e.getSize())...

Интерфейсы в этом пакете являются универсальными функциональными интерфейсами, используемыми JDK, и также доступны для использования кодом пользователя. Хотя они не определяют полный набор форм функций, к которым могут быть адаптированы лямбда-выражения, они предоставляют достаточно для удовлетворения общих требований. Другие функциональные интерфейсы, предоставляемые для определенных целей, такие как FileFilter, определены в пакетах, где они используются.

Интерфейсы в этом пакете аннотированы с помощью FunctionalInterface. Эта аннотация не является требованием для компилятора, чтобы распознать интерфейс как функциональный, но просто помогает зафиксировать намерение разработчика и заручиться помощью компилятора в выявлении случайных нарушений намерения.

Функциональные интерфейсы часто представляют абстрактные понятия, такие как функции, действия или предикаты. При документировании функциональных интерфейсов или при ссылке на переменные, типизированные как функциональные интерфейсы, обычно ссылаются непосредственно на эти абстрактные понятия, например, используя «эта функция» вместо «функция, представленная этим объектом». Когда метод API говорится, что он принимает или возвращает функциональный интерфейс таким образом, например, «применяет предоставленную функцию к…», это означает ссылку не равную null на объект, реализующий соответствующий функциональный интерфейс, если потенциальная нулевость не указана явно.

Функциональные интерфейсы в этом пакете следуют расширяемой схеме именования следующим образом:

  • Существует несколько основных форм функций, включая Function (унарная функция от T к R), Consumer (унарная функция от T к void), Predicate (унарная функция от T к boolean), и Supplier (нульарная функция к R).
  • Формы функций имеют естественную арность, основанную на том, как они наиболее часто используются. Основные формы могут быть изменены префиксом арности, чтобы указать другую арность, например, BiFunction (бинарная функция от T и U к R).
  • Существуют дополнительные производные формы функций, которые расширяют основные формы функций, включая UnaryOperator (расширяет Function) и BinaryOperator (расширяет BiFunction).
  • Параметры типа функциональных интерфейсов могут быть специализированы для примитивов с дополнительными префиксами типа. Для специализации типа возвращаемого значения для типа, имеющего как обобщенный тип возвращаемого значения, так и обобщенные аргументы, мы используем префикс ToXxx, как в ToIntFunction. В противном случае аргументы типа специализируются слева направо, как в DoubleConsumer или ObjIntConsumer. (Префикс типа Obj используется для указания того, что мы не хотим специализировать этот параметр, а хотим перейти к следующему параметру, как в ObjIntConsumer.) Эти схемы могут быть объединены, как в IntToDoubleFunction.
  • Если для всех аргументов есть префиксы специализации, префикс арности можно опустить (как в ObjIntConsumer).
С:
1.8
См. также:
FunctionalInterface
Интерфейс Описание
BiConsumer<T,​U>

Представляет операцию, принимающую два входных аргумента и не возвращающую результат.

BiFunction<T,​U,​R>

Представляет функцию, принимающую два аргумента и возвращающую результат.

BinaryOperator<T>

Представляет операцию над двумя операндами одного типа, возвращающую результат того же типа, что и операнды.

BiPredicate<T,​U>

Представляет предикат (функцию, возвращающую булево значение) от двух аргументов.

BooleanSupplier

Представляет поставщика результатов типа boolean.

Consumer<T>

Представляет операцию, принимающую один входной аргумент и не возвращающую результат.

DoubleBinaryOperator

Представляет операцию над двумя операндами с типом double, возвращающую результат типа double.

DoubleConsumer

Представляет операцию, принимающую один аргумент типа double и не возвращающую результат.

DoubleFunction<R>

Представляет функцию, принимающую аргумент типа double и возвращающую результат.

DoublePredicate

Представляет предикат (булевую функцию) от одного аргумента типа double.

DoubleSupplier

Представляет поставщика результатов типа double.

DoubleToIntFunction

Представляет функцию, принимающую аргумент типа double и возвращающую результат типа int.

DoubleToLongFunction

Представляет функцию, принимающую аргумент типа double и возвращающую результат типа long.

DoubleUnaryOperator

Представляет операцию над одним операндом типа double и возвращающую результат типа double.

Function<T,​R>

Представляет функцию, принимающую один аргумент и возвращающую результат.

IntBinaryOperator

Представляет операцию над двумя операндами типа int и возвращающую результат типа int.

IntConsumer

Представляет операцию, принимающую один аргумент типа int и не возвращающую результат.

IntFunction<R>

Представляет функцию, принимающую аргумент типа int и возвращающую результат.

IntPredicate

Представляет предикат (булевую функцию) от одного аргумента типа int.

IntSupplier

Представляет поставщика результатов типа int.

IntToDoubleFunction

Представляет функцию, принимающую аргумент типа int и возвращающую результат типа double.

IntToLongFunction

Представляет функцию, принимающую аргумент типа int и возвращающую результат типа long.

IntUnaryOperator

Представляет операцию над одним операндом типа int и возвращающую результат типа int.

LongBinaryOperator

Представляет операцию над двумя операндами типа long и возвращающую результат типа long.

LongConsumer

Представляет операцию, принимающую один аргумент типа long и не возвращающую результат.

LongFunction<R>

Представляет функцию, принимающую аргумент типа long и возвращающую результат.

LongPredicate

Представляет предикат (булевую функцию) от одного аргумента типа long.

LongSupplier

Представляет поставщика результатов типа long.

LongToDoubleFunction

Представляет функцию, принимающую аргумент типа long и возвращающую результат типа double.

LongToIntFunction

Представляет функцию, принимающую аргумент типа long и возвращающую результат типа int.

LongUnaryOperator

Представляет операцию над одним операндом типа long и возвращающую результат типа long.

ObjDoubleConsumer<T>

Представляет операцию, принимающую аргумент типа объект и аргумент типа double и не возвращающую результат.

ObjIntConsumer<T>

Представляет операцию, принимающую аргумент типа объект и аргумент типа int и не возвращающую результат.

ObjLongConsumer<T>

Представляет операцию, принимающую аргумент типа объект и аргумент типа long и не возвращающую результат.

Predicate<T>

Представляет предикат (булевую функцию) от одного аргумента.

Supplier<T>

Представляет поставщика результатов.

ToDoubleBiFunction<T,​U>

Представляет функцию, принимающую два аргумента и возвращающую результат типа double.

ToDoubleFunction<T>

Представляет функцию, возвращающую результат типа double.

ToIntBiFunction<T,​U>

Представляет функцию, принимающую два аргумента и возвращающую результат типа int.

ToIntFunction<T>

Представляет функцию, возвращающую результат типа int.

ToLongBiFunction<T,​U>

Представляет функцию, принимающую два аргумента и возвращающую результат типа long.

ToLongFunction<T>

Представляет функцию, возвращающую результат типа long.

UnaryOperator<T>

Представляет операцию над одним операндом, возвращающую результат того же типа, что и операнд.

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/package-summary.html

Spec-Zone .ru
спецификации, руководства, описания, API