BinaryOperator
是一种作用于单一类型的操作数和结果的函数,即BinaryOperator<T>
。
BinaryOperator不是BinaryFunction的子类吗?
是的,BinaryOperator
确实extends BiFunction
。但请注意文档中的说明(格式由我调整):
这是BiFunction
的一个特化,适用于操作数和结果都是相同类型的情况。
完整的表示如下:
BinaryOperator<T> extends BiFunction<T,T,T>
因此你的代码应该与以下内容兼容:
BinaryOperator<Integer> binaryOperator = (a, b) -> a + b
System.out.println(binaryOperator.apply(10, 60))
如果你要处理两个原始整数,可以使用IntBinaryOperator
函数接口(在你的例子中使用了“加上两个整数”)。
IntBinaryOperator intBinaryOperator = (a, b) -> a + b;
System.out.println(intBinaryOperator.applyAsInt(10, 60));
表示对两个int数值操作并生成一个int数值结果。这是针对int的BinaryOperator
的原始类型专用。
我正在使用Integer,我仍然可以使用IntBinaryOperator吗?
是的,您仍然可以使用它但是请注意IntBinaryOperator
的表示方式。
Integer first = 10;
Integer second = 60;
IntBinaryOperator intBinaryOperator = new IntBinaryOperator() {
@Override
public int applyAsInt(int a, int b) {
return Integer.sum(a, b);
}
};
Integer result = intBinaryOperator.applyAsInt(first, second);
如果你将first
和second
拆箱为基本类型,然后将它们相加作为Integer
类型的result
输出,这将会给你带来额外的开销。
注意:在使用Integer
时要小心使用null-safe values,否则可能会出现NullPointerException
。
Integer
,我还能使用IntBinaryOperator
吗? - ManiBinaryOperator
,因为IntBinaryOperator
会增加自动装箱和拆箱的开销。请参见答案中的编辑。 - Naman