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

Java技术求助:解析嵌套Map<?,?>生成含完整路径的Map<String,String>

解析嵌套Map生成路径-值映射的实现方案

核心思路

通过递归遍历嵌套的Map<?,?>结构,逐层拼接节点路径,当遍历到非Map类型的叶子节点时,将完整路径和对应值存入目标Map<String,String>中。路径采用点(.)作为层级分隔符,和你给出的示例格式一致。

Java实现代码

import java.util.HashMap;
import java.util.Map;

public class NestedMapFlattener {

    // 入口方法:接收原始嵌套Map,返回扁平化的路径-值映射
    public static Map<String, String> flattenMap(Map<?, ?> inputMap) {
        Map<String, String> result = new HashMap<>();
        // 初始路径为空,启动递归遍历
        traverse(inputMap, "", result);
        return result;
    }

    // 递归遍历核心方法
    private static void traverse(Map<?, ?> currentMap, String currentPath, Map<String, String> result) {
        for (Map.Entry<?, ?> entry : currentMap.entrySet()) {
            String key = entry.getKey().toString();
            // 拼接当前层级路径:已有路径则加前缀点,否则直接用当前key
            String newPath = currentPath.isEmpty() ? key : currentPath + "." + key;
            Object value = entry.getValue();

            // 判断当前值是否为嵌套Map,是则继续递归,否则存入结果
            if (value instanceof Map<?, ?>) {
                traverse((Map<?, ?>) value, newPath, result);
            } else {
                result.put(newPath, value.toString());
            }
        }
    }

    // 示例测试代码
    public static void main(String[] args) {
        // 构建你给出的嵌套Map结构
        Map<String, Object> testMap = new HashMap<>();
        Map<String, Object> inputMap = new HashMap<>();
        Map<String, Object> dataMap = new HashMap<>();
        
        Map<String, Object> content1Map = new HashMap<>();
        content1Map.put("value", "value1");
        Map<String, Object> content2Map = new HashMap<>();
        content2Map.put("value", "value2");
        
        dataMap.put("content1", content1Map);
        dataMap.put("content2", content2Map);
        
        Map<String, Object> metaMap = new HashMap<>();
        metaMap.put("metaContent", "content");
        
        inputMap.put("data", dataMap);
        inputMap.put("meta", metaMap);
        testMap.put("test", inputMap);

        // 执行扁平化转换
        Map<String, String> flattenedMap = flattenMap(testMap);

        // 打印结果
        flattenedMap.forEach((k, v) -> System.out.printf("(\"%s\", \"%s\")%n", k, v));
    }
}

代码说明

  • 入口方法flattenMap:初始化结果容器,触发递归遍历流程。
  • 递归方法traverse:
    • 遍历当前Map的所有键值对,动态拼接层级路径。
    • 遇到嵌套Map则递归深入,遇到叶子节点则将路径和值存入结果。
  • 类型兼容:通过toString()统一处理键和值的类型转换,适配Map<?,?>的泛型不确定性。

测试输出

运行main方法后,输出完全匹配你的预期:

("test.input.data.content1.value", "value1")
("test.input.data.content2.value", "value2")
("test.input.meta.metaContent", "content")

注意事项

  • 若嵌套结构中存在数字、布尔值等非字符串叶子节点,toString()会自动转换为对应字符串形式。
  • 空输入Map会返回空结果,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:18:29