如何在Java中使用lambdas创建Function2实例?

如何在Java中使用lambdas创建Function2实例?,lambda,java-8,Lambda,Java 8,我正在尝试用Java实现lambda Function2: JavaPairRDD<String, Integer> reducedCounts = counts.reduceByKey(new Function2<Integer, Integer, Integer>() { @Override public Integer call(final Integer value0, final Integer value1) { return

我正在尝试用Java实现lambda Function2:

JavaPairRDD<String, Integer> reducedCounts = counts.reduceByKey(new Function2<Integer, Integer, Integer>() {
    @Override
    public Integer call(final Integer value0, final Integer value1) {
        return Integer.valueOf(value0.intValue() + value1.intValue());
    }
});
javapairdd reducedCounts=counts.reduceByKey(新函数2(){
@凌驾
公共整数调用(最终整数值0,最终整数值1){
返回Integer.valueOf(value0.intValue()+value1.intValue());
}
});
上面是一个示例,但是如何将其更改为lamb8格式?我想定义为一个单独的函数

Function2<...> f2 = LAMBDA;
counts.reduceByKey(f2);
function2f2=LAMBDA;
计数。还原基(f2);

在这种情况下,您可以选择最简单的方法参考:

Function2<Integer, Integer, Integer> f2 = Integer::sum;
counts.reduceByKey(f2)
function2f2=Integer::sum;
计数。还原键(f2)
这等于:

Function2<Integer, Integer, Integer> f2 = (i1, i1) -> i1 + i2;
counts.reduceByKey(f2)
function2f2=(i1,i1)->i1+i2;
计数。还原键(f2)


此外,这种简化也是可能的,因为为了计算两个整数的和,您需要执行大量不必要的装箱/拆箱操作。

您可以选择方法参考,这是本例中最简单的选项:

Function2<Integer, Integer, Integer> f2 = Integer::sum;
counts.reduceByKey(f2)
function2f2=Integer::sum;
计数。还原键(f2)
这等于:

Function2<Integer, Integer, Integer> f2 = (i1, i1) -> i1 + i2;
counts.reduceByKey(f2)
function2f2=(i1,i1)->i1+i2;
计数。还原键(f2)


此外,这种简化也是可能的,因为为了计算两个整数的和,您需要执行大量不必要的装箱/拆箱操作。

由于
Function2
是一个函数接口,因此您可以使用一个简单的lambda表达式来实现它:

Function2<Integer,Integer,Integer> plus = (x,y)->Integer.valueOf(x.intValue()+y.intValue());

由于
Function2
是一个函数接口,因此您可以使用一个简单的lambda表达式来实现它:

Function2<Integer,Integer,Integer> plus = (x,y)->Integer.valueOf(x.intValue()+y.intValue());

计数。reduceByKey((x,y)->x+y)
计数。reduceByKey((x,y)->x+y)@Luckylukee我相信这正是你想要的:)非常干净。我写了一篇lambda,差点就走错路了。必须记住方法引用@我相信这正是你想要的:)非常干净。我写了一篇lambda,差点就走错路了。必须记住方法引用!!关于这个问题的任何建议,如何处理这个UDF问题,关于这个问题的任何建议,如何处理这个UDF问题