Класс BinaryOperator
Класс BinaryOperator - это функциональный интерфейс из пакета
java.util.function, который наследуется от BiFunction.
Он представляет собой операцию над двумя операндами одного и того же типа,
возвращающую результат того же типа. В первом параметре мы передаем первый
операнд, во втором - второй операнд, а возвращаемое значение имеет тот же
тип, что и оба аргумента. Благодаря такому контракту BinaryOperator
удобно применять в stream-ах - например, для сложения, умножения,
нахождения минимума или максимума, а также для объединения строк.
Интерфейс имеет один абстрактный метод apply, унаследованный от
BiFunction, и несколько статических методов: minBy,
maxBy. Также доступен унаследованный метод andThen.
Синтаксис
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T>
{
T apply(T t, T u);
}
Запись типа при объявлении переменной:
BinaryOperator<T> op = (a, b) -> ...;
Пример
Давайте сложим все числа stream-а с помощью BinaryOperator
и метода reduce:
import java.util.List;
import java.util.function.BinaryOperator;
public class Main
{
public static void main(String[] args)
{
BinaryOperator<Integer> sum = (a, b) -> a + b;
List<Integer> list = List.of(1, 2, 3, 4, 5);
int res = list.stream().reduce(0, sum);
System.out.println(res);
}
}
Результат выполнения кода:
15
Пример
Давайте найдем максимальный элемент stream-а, используя статический
метод maxBy:
import java.util.List;
import java.util.function.BinaryOperator;
public class Main
{
public static void main(String[] args)
{
BinaryOperator<Integer> max = BinaryOperator.maxBy(Integer::compareTo);
List<Integer> list = List.of(1, 2, 3, 4, 5);
int res = list.stream().reduce(0, max);
System.out.println(res);
}
}
Результат выполнения кода:
5
Пример
Давайте объединим строки stream-а в одну с помощью BinaryOperator:
import java.util.List;
import java.util.function.BinaryOperator;
public class Main
{
public static void main(String[] args)
{
BinaryOperator<String> concat = (a, b) -> a + b;
List<String> list = List.of("a", "b", "c", "d", "e");
String res = list.stream().reduce("", concat);
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
reduce,
который сворачивает stream в одно значение -
класс
UnaryOperator,
который принимает и возвращает один операнд -
класс
BiFunction,
который принимает два аргумента и возвращает результат -
класс
Function,
который принимает один аргумент и возвращает результат