2014-10-09 724 views
0

试图测试Java8拉姆达,但类型是混乱:Java8功能类型`(A,B) - >一个+ B`

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

由于最通用的方法。

回答

4

最通用的方式是一个lambda,一旦你把它分配给一个变量,或将其转换为一个类型就成为一个特定的类型。

尝试类型的减少()预计

IntBinaryOperator add = (a,b) -> a+b 

或者使用内置的一个。

int sum2 = IntStream.range(0, 10) 
        .reduce(0, Integer::sum); 
+0

我喜欢内置的'Integer :: sum',非常感谢Peter! – 2014-10-09 08:10:24

1

显然,您需要IntBinaryOperator代替.reduce(),而不是ToIntBiFunction

IntBinaryOperator add = (a, b) -> a + b; 
int sum2 = IntStream.range(0, 10) 
        .reduce(0, add); 
+0

谢谢kocko! – 2014-10-09 08:10:52

相关问题