BinaryOperator的核心作用是合并两个同类型数据并返回同类型结果,本质是BiFunction的特化接口,适用于归约操作;需满足结合律,常与Stream.reduce配合使用。

BinaryOperator 的核心作用就是合并两个同类型的数据,返回相同类型的单个结果。它不自己遍历、不管理集合,只定义“怎么把 a 和 b 合成一个 c”。
它本质是 BiFunction
用 BinaryOperator 合并两个值最直接的方式是调用 apply 方法
BinaryOperator<Integer> add = (a, b) -> a + b; int result = add.apply(10, 25); // 得到 35
这个过程没有副作用、不修改原值,纯函数式:输入两个 Integer,输出一个 Integer。
常见合并场景与写法要点
数值运算
直接用方法引用更简洁:BinaryOperator<integer> sum = Integer::sum;</integer>
也可自定义逻辑,比如带校验的加法(避免溢出)、取平均后转整数等。-
字符串处理
立即学习“Java免费学习笔记(深入)”;
BinaryOperator<String> concat = (s1, s2) -> s1 + " | " + s2; String merged = concat.apply("订单", "已完成"); // "订单 | 已完成" -
对象合并(需确保逻辑满足结合律)
比如合并两个ReportSummary对象:BinaryOperator<ReportSummary> merge = (r1, r2) -> new ReportSummary(r1.totalAmount + r2.totalAmount, Math.max(r1.maxDate, r2.maxDate)); -
取极值或逻辑选择
BinaryOperator<Double> max = (a, b) -> a >= b ? a : b; BinaryOperator<String> longer = (s1, s2) -> s1.length() >= s2.length() ? s1 : s2;
和 Stream.reduce 配合才能批量合并多个数据
单独用 BinaryOperator 只能处理两个值;要合并整个列表(比如 ListStream.reduce(identity, accumulator):
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int total = numbers.stream()
.reduce(0, Integer::sum, Integer::sum); // 第三个参数可省略(并行流才需要)其中第二个参数 Integer::sum 就是 BinaryOperator
注意:用于 reduce 的 BinaryOperator 必须满足结合律(如 a+(b+c) == (a+b)+c),否则并行计算结果不可靠。
不复杂但容易忽略


















