`(a,b) - >的Java8函数类型A + B`

时间:2014-10-09 07:47:58

标签: java lambda java-8

尝试测试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

感谢。

2 个答案:

答案 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);