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

Java实现两个List<Map<String,String>>的笛卡尔积并合并条目

实现思路

你需要在每轮配对两个Map时创建独立的新Map对象,将两个来源Map的键值对全部合并到这个新Map中,再存入结果集合,即可满足需求。

注意:Java的Map本身不允许重复键,如果d1和d2存在同名键,后存入的d2的键值会覆盖d1的同名键值。你的示例中出现的重复PersonID在标准Java Map中无法保留,若需要保留重复字段建议调整数据结构(比如将值封装为列表、或者给键加前缀区分来源)。

正确实现代码

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

public static List<Map<String, String>> cartesianProduct(List<Map<String, String>> d1, List<Map<String, String>> d2) {
    List<Map<String, String>> d3 = new ArrayList<>();
    int s1 = d1.size();
    int s2 = d2.size();
    for (int i = 0; i < s1; i++) {
        for (int j = 0; j < s2; j++) {
            // 新建空Map用于存储合并后的键值对
            Map<String, String> mergedMap = new HashMap<>();
            // 先存入d1的当前条目所有键值
            mergedMap.putAll(d1.get(i));
            // 再存入d2的当前条目所有键值,同名键会覆盖d1的旧值
            mergedMap.putAll(d2.get(j));
            // 将合并后的单个Map加入结果集合
            d3.add(mergedMap);
        }
    }
    return d3;
}

代码说明

  • 用Map.putAll()方法替代了无效的+运算符,解决了HashMap不支持加法运算的问题
  • 每轮配对仅向结果集合添加1个合并后的mergedMap,解决了两个条目分开存储的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:10