BiFunction<X, X> 和 BinaryOperator<X> 的区别
Difference between BiFunction<X, X> and BinaryOperator<X>
我无法理解为什么BinaryOperator<Integer>
可以放在下面代码中A
的地方,而不是BiFunction<Integer, Integer>
?
A foo = (a, b) -> { return a * a + b * b; };
int bar = foo.apply(2, 3);
System.out.println(bar);
谁能帮我理解一下。
BinaryOperator
是一个特殊的BiFunction
。因此,您可以为它们分配相同的表达式。看看这个。
BinaryOperator<Integer> foo = (a, b) -> {
return a * a + b * b;
};
BiFunction<Integer, Integer, Integer> barFn = (a, b) -> {
return a * a + b * b;
};
如果你看源码,那就是
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
// Remainder omitted.
}
Bifunction 和 BinaryOperator 相同,但这里唯一的区别是参数类型和 return 接口类型。
考虑您要连接两个字符串和 return 结果的情况。在这种情况下,您可以选择其中之一,但 BinaryOperator 是一个不错的选择,因为如果您关注参数和 return 类型,它们都是相同的。
BinaryOperator<String> c=(str,str1)->str+str1;
您可以对 Bifunction 执行相同的操作,但现在可以在此处查看不同之处:
BiFunction<String,String,String> c=(str,str1)->str+str1;
现在考虑我们要添加两个整数和 return 一个字符串的情况。这里只能选择BiFunction,不能选择BinaryOperator:
BiFunction<Integer,Integer,String> c=(a,b)->"Answer="+(a+b);
我无法理解为什么BinaryOperator<Integer>
可以放在下面代码中A
的地方,而不是BiFunction<Integer, Integer>
?
A foo = (a, b) -> { return a * a + b * b; };
int bar = foo.apply(2, 3);
System.out.println(bar);
谁能帮我理解一下。
BinaryOperator
是一个特殊的BiFunction
。因此,您可以为它们分配相同的表达式。看看这个。
BinaryOperator<Integer> foo = (a, b) -> {
return a * a + b * b;
};
BiFunction<Integer, Integer, Integer> barFn = (a, b) -> {
return a * a + b * b;
};
如果你看源码,那就是
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
// Remainder omitted.
}
Bifunction 和 BinaryOperator 相同,但这里唯一的区别是参数类型和 return 接口类型。
考虑您要连接两个字符串和 return 结果的情况。在这种情况下,您可以选择其中之一,但 BinaryOperator 是一个不错的选择,因为如果您关注参数和 return 类型,它们都是相同的。
BinaryOperator<String> c=(str,str1)->str+str1;
您可以对 Bifunction 执行相同的操作,但现在可以在此处查看不同之处:
BiFunction<String,String,String> c=(str,str1)->str+str1;
现在考虑我们要添加两个整数和 return 一个字符串的情况。这里只能选择BiFunction,不能选择BinaryOperator:
BiFunction<Integer,Integer,String> c=(a,b)->"Answer="+(a+b);