函数接口+ Lambda表达式,用于表示数组中的整数和

时间:2019-02-19 13:32:26

标签: java lambda functional-programming functional-interface

我正在解决一个问题,要求创建一个函数接口,该函数接口的方法将输入一个整数k和一个整数数组并返回一个整数。 然后,我应该为接口实例分配一个lambda表达式,该表达式返回数组中所有小于或等于k的值的和。

对于界面,我认为我应该做类似的事情:

@FunctionalInterface
public interface FunctionOnAnArray {
    int apply(int k, int ... intArray);
}

但是,我无法确定lambda表达式。

public class Test {
    int sum = 0;
    FunctionOnAnArray f = (k, intArray) -> { for (int i : intArray) if (i <= k) sum += i; return sum; };
}

这似乎太笨拙了。

1 个答案:

答案 0 :(得分:1)

您可以将其简化为:

FunctionOnAnArray f = (k, arr) -> Arrays.stream(arr)
    .filter(a -> a <= k)
    .sum();

旁边 :您还可以选择不使用Varargs定义接口,并将其更新为:

@FunctionalInterface
public interface FunctionOnAnArray {
    int apply(int k, int[] arr);
}