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

问题描述 投票:3回答:1

我正在处理一个练习,要求创建一个函数接口,其方法将整数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; };
}

这似乎太笨重了。

java lambda functional-programming functional-interface
1个回答
1
投票

您可以将其简化为:

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

除此之外:您还可以选择不使用Varargs定义接口并将其更新为:

@FunctionalInterface
public interface FunctionOnAnArray {
    int apply(int k, int[] arr);
}
© www.soinside.com 2019 - 2024. All rights reserved.