binaryoperator是java 8引入的函数式接口,继承自bifunction,专用于两个同类型输入并返回同类型结果的二元运算;常用于集合/流聚合(如reduce)、数学计算、字符串拼接及自定义类型合并。

BinaryOperator 是 Java 8 引入的函数式接口,专用于处理“两个同类型输入、一个同类型输出”的二元运算。它本质是 BiFunction
核心用法:定义和调用简单运算
直接用 Lambda 表达式创建实例,调用 apply 方法传入两个参数即可执行:
- 加法:BinaryOperator
add = (a, b) -> a + b; ,add.apply(7, 3) 返回 10 - 取大值:BinaryOperator
max = Math::max; ,max.apply(2.5, 4.1) 返回 4.1 - 字符串拼接:BinaryOperator
concat = (s1, s2) -> s1 + s2; ,concat.apply("Java", "8") 返回 "Java8"
配合 Stream.reduce 做聚合计算
这是最典型的实战场景。reduce 需要一个 BinaryOperator 来合并流中元素:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 求和:int sum = list.stream().reduce(0, Integer::sum);
- 找最大年龄:Optional
oldest = people.stream().reduce((p1, p2) -> p1.age >= p2.age ? p1 : p2); - 注意:若流为空且未提供初始值,返回 Optional.empty();提供初始值(如 0、"")可避免空指针
方法引用传递非静态逻辑
不能直接传方法名,但可用方法引用把对象实例的方法转为 BinaryOperator:
- 假设有类 Calculator 含实例方法 int multiply(int a, int b)
- 先创建实例:Calculator calc = new Calculator();
- 再引用:BinaryOperator
mulOp = calc::multiply; - 这样就把具体对象的行为封装进函数对象,支持复用和解耦
自定义类型支持需确保类型一致
BinaryOperator 要求输入和输出类型完全相同,因此用于自定义类时必须明确定义“合并规则”:
- 比如两个 Point 相加生成新 Point:(p1, p2) -> new Point(p1.x + p2.x, p1.y + p2.y)
- 或两个 Money 相加:(m1, m2) -> Money.of(m1.amount + m2.amount)
- 务必保证构造/计算过程不破坏不可变性,尤其在并发或流操作中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










