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,输出一个 Integer。
常见合并场景与写法要点
数值运算
直接用方法引用更简洁:BinaryOperatorsum = Integer::sum;
也可自定义逻辑,比如带校验的加法(避免溢出)、取平均后转整数等。-
字符串处理
BinaryOperator<string> concat = (s1, s2) -> s1 + " | " + s2; String merged = concat.apply("订单", "已完成"); // "订单 | 已完成"</string> -
对象合并(需确保逻辑满足结合律)
比如合并两个ReportSummary对象:BinaryOperator<reportsummary> merge = (r1, r2) -> new ReportSummary(r1.totalAmount + r2.totalAmount, Math.max(r1.maxDate, r2.maxDate));</reportsummary> -
取极值或逻辑选择
BinaryOperator<double> max = (a, b) -> a >= b ? a : b; BinaryOperator<string> longer = (s1, s2) -> s1.length() >= s2.length() ? s1 : s2;</string></double>
和 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>
其中第二个参数 Integer::sum 就是 BinaryOperator
注意:用于 reduce 的 BinaryOperator 必须满足结合律(如 a+(b+c) == (a+b)+c),否则并行计算结果不可靠。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











