You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用函数式接口与Lambda表达式实现数组中≤k的整数求和?

简化你的Lambda表达式方案

嘿,你的函数式接口定义得完全没问题!现在咱们来把那个繁琐的Lambda简化一下——Java 8引入的Stream API正好能帮咱们搞定这个求和需求,而且代码会简洁很多,还能避免你当前写法里的潜在问题。

首先得指出你现有代码的一个小隐患:你用了类的实例变量sum来累积结果,这会导致每次调用f.apply()的时候,结果都会叠加之前的sum值,这肯定不是你想要的对吧?而且代码也不够简洁。

咱们直接用Stream来处理数组:

  1. 把传入的intArray转换成IntStream
  2. 过滤出所有小于等于k的元素
  3. 对过滤后的元素求和

整合到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:44:35