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

如何在Java中合并HashMap中重复值对应的键

实现HashMap相同值对应的键合并需求

针对你提出的需求——将原HashMap中值相同的键合并为新键,最终生成键为合并后字符串、值为原重复值的新HashMap,这里提供两种实用的Java实现方式:

方法一:传统循环遍历(兼容所有Java版本)

核心思路是先用临时容器按值分组,把对应原键拼接起来,最后转成目标Map:

HashMap<String, String> map = new HashMap<>();
HashMap<String, String> newMap = new HashMap<>();

map.put("A","1");
map.put("B","2");
map.put("C","2");
map.put("D","1");

// 临时容器:key为原map的值,value为拼接后的原键字符串
Map<String, StringBuilder> tempMap = new HashMap<>();

// 遍历原map,拼接同值对应的键
for (Map.Entry<String, String> entry : map.entrySet()) {
    String originalKey = entry.getKey();
    String originalValue = entry.getValue();
    // 若tempMap中无该值的条目,新建StringBuilder;有则直接追加原键
    tempMap.computeIfAbsent(originalValue, k -> new StringBuilder()).append(originalKey);
}

// 将临时容器的内容转成目标newMap
for (Map.Entry<String, StringBuilder> entry : tempMap.entrySet()) {
    newMap.put(entry.getValue().toString(), entry.getKey());
}

// 验证输出
System.out.println(newMap); // 输出 {AD=1, BC=2}

方法二:Java 8+ Stream API(简洁写法)

利用Stream的分组和收集器特性,一行链式调用完成转换:

HashMap<String, String> map = new HashMap<>();
map.put("A","1");
map.put("B","2");
map.put("C","2");
map.put("D","1");

HashMap<String, String> newMap = map.entrySet().stream()
    // 第一步:按原map的值分组,把同值的键拼接成字符串
    .collect(Collectors.groupingBy(
        Map.Entry::getValue,
        Collectors.mapping(Map.Entry::getKey, Collectors.joining())
    ))
    // 第二步:反转分组后的键值对,存入目标HashMap
    .entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getValue,
        Map.Entry::getKey,
        (oldVal, newVal) -> oldVal, // 键冲突处理(此处理论不会触发)
        HashMap::new
    ));

System.out.println(newMap); // 输出 {AD=1, BC=2}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:40:35