Gymterview
junior

Для чего нужны функциональные интерфейсы BinaryOperator, DoubleBinaryOperator, IntBinaryOperator и LongBinaryOperator?

BinaryOperator<T> — специализация BiFunction<T, T, T>, принимающая два аргумента одного типа и возвращающая результат того же типа. Типичное применение — агрегация: сложение, конкатенация, выбор максимума.

Пример
BinaryOperator<Integer> sum = (a, b) -> a + b;
System.out.println(sum.apply(1, 2)); // 3

Примитивные специализации:

Интерфейс Работает с типом
BinaryOperator<T> (T, T) -> T
DoubleBinaryOperator (double, double) -> double
IntBinaryOperator (int, int) -> int
LongBinaryOperator (long, long) -> long

BinaryOperator активно используется в методе Stream.reduce(), где он объединяет элементы потока в единый результат. Статические методы minBy() и maxBy() позволяют создать оператор выбора минимального или максимального элемента на основе Comparator.

На собеседовании: подчеркните, что BinaryOperator — это BiFunction, у которого все три типа совпадают. Это частый вопрос на понимание иерархии функциональных интерфейсов.