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, у которого все три типа совпадают. Это частый вопрос на понимание иерархии функциональных интерфейсов.