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

JavaFX统计ObservableList<CustomClass>中各id对应元素数量的方法

用Stream和Collectors统计自定义类集合的ID重复数量

代码实现

先给出CustomClass的基础定义(需包含获取id的方法):

public class CustomClass {
    private int id;
    private String name;

    public CustomClass(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 必须提供getId方法,用于提取分组键
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

针对已填充数据的ObservableList<CustomClass>,用Stream+Collectors完成统计的代码如下:

ObservableList<CustomClass> customList = ...; // 你的目标数据集合

Map<Integer, Long> idCountMap = customList.stream()
    .collect(Collectors.groupingBy(
        CustomClass::getId,  // 按CustomClass的id作为分组依据
        Collectors.counting() // 统计每个分组内的元素数量
    ));

工作原理拆解

  • Stream初始化:调用customList.stream()将ObservableList转换为Stream对象,Stream提供函数式元素处理能力,无需手动编写循环遍历逻辑。
  • 分组逻辑:Collectors.groupingBy是核心收集器,第一个参数CustomClass::getId是方法引用,作用是从每个CustomClass实例中提取id值作为Map的key。Stream会自动遍历所有元素,将相同id的元素归为同一组。
  • 统计逻辑:第二个参数Collectors.counting()是下游收集器,负责对每个分组内的元素数量进行计数,计数结果作为Map对应的value(类型为Long)。
  • 结果整合:collect方法会将分组和统计的结果最终组装成Map<Integer, Long>,直接得到每个id对应的元素总数。

对比手动遍历实现

Stream方式属于声明式编程,你只需要明确“按id分组并统计数量”的需求,无需手动维护Map的初始化、计数累加等细节,代码更简洁易读,也减少了出错的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:55:17