试图测试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
谢谢。
发布于 2014-10-09 07:54:56
最通用的方法是作为lambda,一旦将它赋值给变量,或者将其转换为类型,它就变成了特定的类型。
尝试reduce()所期望的类型
IntBinaryOperator add = (a,b) -> a+b
或者使用内置的一种。
int sum2 = IntStream.range(0, 10)
.reduce(0, Integer::sum);
发布于 2014-10-09 07:54:40
显然,您需要一个用于IntBinaryOperator
的.reduce()
,而不是ToIntBiFunction
。
IntBinaryOperator add = (a, b) -> a + b;
int sum2 = IntStream.range(0, 10)
.reduce(0, add);
https://stackoverflow.com/questions/26273003
复制相似问题