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

Java如何使用HashMap.merge存储自定义对象实现商品销量累加统计

实现方案

你需要先调整merge方法的第二个参数类型,再自定义合并逻辑即可,完整实现如下:

  1. 建议先统一Java类命名规范(类名采用大驼峰),为ProductCount、Sale类补充必要的getter/setter方法(如果直接使用public字段可跳过)
  2. 调整遍历逻辑,代码如下:
HashMap<String, ProductCount> productSaleHash = new HashMap<>();
saleList.forEach(sale -> {
    // 构造当前sale对应的ProductCount实例,提前填充所有需要的属性
    ProductCount current = new ProductCount();
    current.productId = sale.productId;
    current.productName = sale.productName;
    current.amountSold = sale.amountSold;

    productSaleHash.merge(
        sale.productId,
        current,
        // 自定义合并逻辑:累加相同productId的销量
        (oldVal, newVal) -> {
            oldVal.amountSold += newVal.amountSold;
            return oldVal;
        }
    );
});

逻辑说明

  • merge方法的第二个参数必须和Map的value类型一致,因此不能直接传入int类型的销量,需要先构造好ProductCount实例
  • 第三个参数是重映射函数,当Map中已存在相同key时会触发该函数,入参分别是已存在的旧值和本次传入的新值,你只需要在函数内完成销量累加后返回对象即可
  • 如果不想修改原有的旧对象,也可以构造新的ProductCount实例合并属性后返回,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:57:05