list中Map合并重复数据(map中key相等的value值相加)

public static void main(String[] args) {
    List<SysMenuEntity> list = new ArrayList<>();
    list.add(new SysMenuEntity(){{
        setId(100l);
        setParentId(1l);
    }});
    list.add(new SysMenuEntity(){{
        setId(100l);
        setParentId(2l);
    }});
    list.add(new SysMenuEntity(){{
        setId(200l);
        setParentId(2l);
    }});
    list.add(new SysMenuEntity(){{
        setId(200l);
        setParentId(2l);
    }});


    Map<Long, Long> collect = list.stream().collect(Collectors.groupingBy(SysMenuEntity::getId, Collectors.summingLong(SysMenuEntity::getParentId)));
    System.out.println(collect);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Listmap合并mapkey相同value可以通过以下步骤实现: 1. 创建一个空的HashMap对象,用于存储合并后的结果。 2. 遍历List的每个map对象。 3. 对于每个map对象,遍历其的每个键对。 4. 判断当前键对的键是否已存在于HashMap。 - 如果键不存在于HashMap,则将该键对直接添加到HashMap,作为新的键对。 - 如果键已存在于HashMap,则将该键对应的与当前相加,并更新HashMap该键的。 5. 完成遍历后,HashMap存储的就是合并后的结果。 下面是一个示例代码: ``` import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MapMerge { public static void main(String[] args) { List<Map<String, Integer>> mapList = new ArrayList<>(); // 假设有三个map Map<String, Integer> map1 = new HashMap<>(); map1.put("key1", 10); map1.put("key2", 20); Map<String, Integer> map2 = new HashMap<>(); map2.put("key1", 30); map2.put("key3", 40); Map<String, Integer> map3 = new HashMap<>(); map3.put("key2", 50); map3.put("key3", 60); mapList.add(map1); mapList.add(map2); mapList.add(map3); Map<String, Integer> result = new HashMap<>(); // 用于存储合并后的结果 for (Map<String, Integer> map : mapList) { for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); int value = entry.getValue(); if (result.containsKey(key)) { result.put(key, result.get(key) + value); } else { result.put(key, value); } } } System.out.println(result); } } ``` 运行结果为:{key1=40, key2=70, key3=100} ### 回答2: 要合并mapkey相同value,可以按照以下步骤进行操作: 1. 遍历map的所有keyvalue。 2. 判断当前的key是否已经存在于list。 3. 如果key已经存在于list,则取出对应的value,并将当前的value加上已有的value,再存入list,替换原有的value。 4. 如果key不存在于list,则将当前的keyvalue作为一个新的键对存入list。 5. 遍历完整个map之后,list存储的就是合并后的mapkey相同value。 下面是一个示例代码: ``` import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MergeMap { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); map.put("A", 4); map.put("D", 5); List<Map.Entry<String, Integer>> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry: map.entrySet()) { boolean isExist = false; for (Map.Entry<String, Integer> existingEntry: list) { if (existingEntry.getKey().equals(entry.getKey())) { existingEntry.setValue(existingEntry.getValue() + entry.getValue()); isExist = true; break; } } if (!isExist) { list.add(entry); } } for (Map.Entry<String, Integer> entry: list) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } } } ``` 运行以上代码,输出结果为: ``` Key: A, Value: 5 Key: B, Value: 2 Key: C, Value: 3 Key: D, Value: 5 ``` 可见,原先map"Key: A"的value为1和4,经过合并后变为5。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值