Java如何使用HashMap.merge存储自定义对象实现商品销量累加统计
实现方案
你需要先调整merge方法的第二个参数类型,再自定义合并逻辑即可,完整实现如下:
- 建议先统一Java类命名规范(类名采用大驼峰),为
ProductCount、Sale类补充必要的getter/setter方法(如果直接使用public字段可跳过) - 调整遍历逻辑,代码如下:
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
相关产品推荐
相关产品推荐

