尝试测试Java8 lambda,但类型令人困惑:
import java.util.function.ToIntBiFunction;
import java.util.stream.IntStream;
public class Test {
public static void main(String... args) {
int sum1 = 0;
for (int n = 0; n < 10; n++) {
sum1 += n;
}
ToIntBiFunction<Integer, Integer> add = (a, b) -> a + b;
int sum2 = IntStream.range(0, 10)
.reduce(0, add); //error here
System.out.println(""+sum1);
System.out.println(""+sum2);
}
}
Test.java:15:错误:不兼容的类型:ToIntBiFunction无法转换为IntBinaryOperator .reduce(0,add);
定义函数的最通用方法是什么
(a,b) -> a+b
感谢。
答案 0 :(得分:3)
最通用的方法是作为lambda,一旦将其分配给变量,或将其转换为类型,它就会成为特定类型。
尝试使用reduce()期望的类型
IntBinaryOperator add = (a,b) -> a+b
或使用内置的。
int sum2 = IntStream.range(0, 10)
.reduce(0, Integer::sum);
答案 1 :(得分:0)
显然,IntBinaryOperator
需要.reduce()
,而不是ToIntBiFunction
。
IntBinaryOperator add = (a, b) -> a + b;
int sum2 = IntStream.range(0, 10)
.reduce(0, add);