BiFunction <x,x =“”>和BinaryOperator <x>

时间:2018-10-25 16:19:40

标签: java java-8 java-stream functional-interface

我无法理解如何在下面的代码中将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);

有人可以帮我理解吗?

2 个答案:

答案 0 :(得分:4)

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.
}

答案 1 :(得分:0)

Bifunction和BinaryOperator相同,但是唯一的区别是接口的参数类型和返回类型。

请考虑将两个字符串连接起来并返回结果的情况。在这种情况下,您可以选择它们之一,但是BinaryOperator是一个不错的选择,因为如果您专注于参数和返回类型,则它们都是相同的。

BinaryOperator<String> c=(str,str1)->str+str1;

您可以对Bifunction进行相同操作,但现在可以在此处看到区别:

BiFunction<String,String,String> c=(str,str1)->str+str1;

现在考虑一种情况,我们要添加两个整数并返回一个字符串。在这里,我们只能选择BiFunction,而不能选择BinaryOperator:

BiFunction<Integer,Integer,String> c=(a,b)->"Answer="+(a+b);