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

Java 8如何合并List中id相同的HashMap元素

合并实现方案

核心逻辑为:先将List中所有HashMap按id字段分组,同一id下的所有键值对合并到同一个HashMap中,最后将合并后的结果转成List即可。

方法1:通用遍历实现(兼容所有Java版本)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MergeSameIdMap {
    public static void main(String[] args) {
        // 你的原始测试数据
        List list1= new ArrayList();
        HashMap details= new HashMap();
        details.put("id", "305");
        details.put("text1",true);
        list1.add(details);
        HashMap details2= new HashMap();
        details2.put("id", "305");
        details2.put("text2",true);
        list1.add(details2);

        // 按id存储合并后的HashMap
        Map<String, HashMap> mergeCache = new HashMap<>();
        for (Object o : list1) {
            HashMap currentMap = (HashMap) o;
            String id = (String) currentMap.get("id");
            // 该id首次出现时初始化缓存
            if (!mergeCache.containsKey(id)) {
                HashMap newMergeMap = new HashMap();
                newMergeMap.put("id", id);
                mergeCache.put(id, newMergeMap);
            }
            // 合并当前Map的所有键值对到缓存中
            mergeCache.get(id).putAll(currentMap);
        }
        // 缓存的value就是合并后的结果,转成List即可
        List<HashMap> result = new ArrayList<>(mergeCache.values());
        
        // 打印验证结果
        System.out.println(result);
    }
}

方法2:Java 8+ Stream流式实现(代码更简洁)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

public class MergeSameIdMap {
    public static void main(String[] args) {
        // 你的原始测试数据
        List list1= new ArrayList();
        HashMap details= new HashMap();
        details.put("id", "305");
        details.put("text1",true);
        list1.add(details);
        HashMap details2= new HashMap();
        details2.put("id", "305");
        details2.put("text2",true);
        list1.add(details2);

        List<HashMap> result = new ArrayList<>(list1.stream()
                .map(item -> (HashMap) item)
                .collect(Collectors.toMap(
                        map -> (String) map.get("id"),
                        map -> map,
                        (existingMap, newMap) -> {
                            existingMap.putAll(newMap);
                            return existingMap;
                        }
                )).values());
        
        // 打印验证结果
        System.out.println(result);
    }
}

注意:如果同一个id下存在相同名称的非id键,后续出现的键值会覆盖之前的同名键值,符合常规业务的合并逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:39:03