函数式接口 + 数组中整数总和的 lambda 表达式
Functional interface + lambda expression for sum of integers in an array
我正在处理一个练习,该练习要求创建一个功能接口,其方法将整数 k 和一个整数数组以及 returns 一个整数作为输入。
然后,我应该为接口的一个实例分配一个 lambda 表达式,该表达式 returns 数组中所有值的总和小于或等于 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; };
}
这似乎太笨拙了。
您可以将其简化为:
FunctionOnAnArray f = (k, arr) -> Arrays.stream(arr)
.filter(a -> a <= k)
.sum();
旁白: 您也可以选择不使用 Varargs 定义接口并将其更新为:
@FunctionalInterface
public interface FunctionOnAnArray {
int apply(int k, int[] arr);
}
我正在处理一个练习,该练习要求创建一个功能接口,其方法将整数 k 和一个整数数组以及 returns 一个整数作为输入。 然后,我应该为接口的一个实例分配一个 lambda 表达式,该表达式 returns 数组中所有值的总和小于或等于 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; };
}
这似乎太笨拙了。
您可以将其简化为:
FunctionOnAnArray f = (k, arr) -> Arrays.stream(arr)
.filter(a -> a <= k)
.sum();
旁白: 您也可以选择不使用 Varargs 定义接口并将其更新为:
@FunctionalInterface
public interface FunctionOnAnArray {
int apply(int k, int[] arr);
}