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

使用Lambda表达式填充Map实现词频统计的语法问题求助

解决单词统计的Lambda表达式问题

嘿,我来帮你修正这个单词统计的Lambda代码!先说说你当前代码的问题:

你用了computeIfAbsent,但这个方法的作用仅仅是当键不存在时,才会执行第二个参数的函数来生成默认值——如果键已经存在,这个函数根本不会触发,所以完全没法实现“已存在则值加1”的逻辑。而且你写的(w) -> (new Integer(1) + 1).intValue()还会返回2,就算新增键也会把值设成2,完全不符合预期。

下面给你两种正确的实现方式,都是用Lambda完成单词统计的需求:

方法1:使用Map.compute()

这个方法可以同时处理键存在和不存在的情况,逻辑清晰:

Consumer<String> wordCount = word -> 
    map.compute(word, (key, currentValue) -> 
        currentValue == null ? 1 : currentValue + 1
    );
  • 当currentValue为null(单词第一次出现),就返回1作为初始值;
  • 当currentValue不为null(单词已存在),就返回currentValue + 1完成累加。

方法2:使用Map.merge()(更简洁)

merge是专门处理这种“新增或累加”场景的方法,代码更紧凑:

Consumer<String> wordCount = word -> 
    map.merge(word, 1, Integer::sum);
  • 第一个参数是要统计的单词(键);
  • 第二个参数是初始值1(单词第一次出现时存入的值);
  • 第三个参数是Integer::sum,表示当键已存在时,把旧值和1相加,用结果更新映射。

这两种方式都能完美实现你想要的“不存在则存1,已存在则加1”的逻辑,选哪个都可以,merge写法更简洁推荐优先用~

内容的提问来源于stack exchange,提问作者Karl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:00