如何用函数式接口与Lambda表达式实现数组中≤k的整数求和?
简化你的Lambda表达式方案
嘿,你的函数式接口定义得完全没问题!现在咱们来把那个繁琐的Lambda简化一下——Java 8引入的Stream API正好能帮咱们搞定这个求和需求,而且代码会简洁很多,还能避免你当前写法里的潜在问题。
首先得指出你现有代码的一个小隐患:你用了类的实例变量sum来累积结果,这会导致每次调用f.apply()的时候,结果都会叠加之前的sum值,这肯定不是你想要的对吧?而且代码也不够简洁。
咱们直接用Stream来处理数组:
- 把传入的
intArray转换成IntStream - 过滤出所有小于等于
k的元素 - 对过滤后的元素求和
整合到Lambda里就是一行代码,不需要代码块,也不需要外部变量。完整的代码如下:
import java.util.Arrays; @FunctionalInterface public interface FunctionOnAnArray { int apply(int k, int... intArray); } public class Test { FunctionOnAnArray f = (k, intArray) -> Arrays.stream(intArray) .filter(i -> i <= k) .sum(); }
这样写的好处:
- 代码简洁直观,一眼就能看出逻辑
- 没有外部状态依赖,每次调用都是独立计算,不会有累积的问题
- 完全符合函数式编程的无副作用要求
如果你想更紧凑一点,甚至可以把Stream操作写到一行里:
FunctionOnAnArray f = (k, intArray) -> Arrays.stream(intArray).filter(i -> i <= k).sum();
内容的提问来源于stack exchange,提问作者Ary
相关产品推荐
相关产品推荐

