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

如何对Collectors.counting()统计的频率值执行除法与求和运算?

解决方案:计算整数频率除以2的和

给定列表:

List<Integer> myIntegers = Arrays.asList(1, 1, 2, 3, 4, 2);

需求是计算所有整数的「出现频率÷2」之和(整数除法,舍去小数),期望结果为2。

方式一:一次流操作完成(无需单独存Map)

不需要先单独生成频率Map,可以直接在流链中完成统计与求和:

int sum = myIntegers.stream()
    // 统计每个整数的出现次数
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    // 取出所有频率值转为流
    .values()
    .stream()
    // 对每个频率做整数除法,转成int类型
    .mapToInt(count -> (int) (count / 2))
    // 求和
    .sum();

方式二:基于已有的频率Map处理

如果你已经通过以下代码拿到了频率Map:

Map<Integer, Long> myIntegerMap = myIntegers.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

直接对Map的频率值进行处理即可:

int sum = myIntegerMap.values()
    .stream()
    .mapToInt(count -> (int) (count / 2))
    .sum();

说明

这里使用的是Java的整数除法,即/运算符对整数(或Long)运算时会自动舍去小数部分,完全符合需求中的计算逻辑:

  • 1出现2次 → 2/2=1
  • 2出现2次 → 2/2=1
  • 3出现1次 → 1/2=0
  • 4出现1次 → 1/2=0
    总和为1+1+0+0=2,与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:04