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

Java如何将点分隔字符串列表转换为带指定值的嵌套Map<String,Object>

Java 实现点分隔路径转嵌套Map方案

实现思路

  • 遍历所有待处理的点分隔字符串,按.分割为层级节点数组
  • 从根Map出发逐层遍历节点,除最后一个节点外,每一层若对应key不存在则新建HashMap<String, Object>存入当前层级
  • 遍历到最后一个节点时,将对应的预设值存入当前层级Map
  • 所有路径处理完成后得到的根Map即为目标结构

完整实现代码

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

public class NestedMapConverter {

    public static void main(String[] args) {
        // 输入的路径与对应值的映射,可根据实际数据源修改
        Map<String, Integer> pathValueMap = new HashMap<>();
        pathValueMap.put("a.b.cc", 1);
        pathValueMap.put("a.dd", 5);
        pathValueMap.put("a.b.f.gg", 8);
        pathValueMap.put("u.ww", 60);

        Map<String, Object> result = convertToNestedMap(pathValueMap);
        // 可引入Jackson、Fastjson等JSON工具序列化result,验证结构是否符合要求
        System.out.println(result);
    }

    public static Map<String, Object> convertToNestedMap(Map<String, Integer> pathValueMap) {
        Map<String, Object> rootMap = new HashMap<>();
        for (Map.Entry<String, Integer> entry : pathValueMap.entrySet()) {
            String[] nodes = entry.getKey().split("\\.");
            Integer value = entry.getValue();
            // 层级指针,初始指向根Map
            Map<String, Object> currentLevel = rootMap;
            // 处理非末尾的层级节点
            for (int i = 0; i < nodes.length - 1; i++) {
                String node = nodes[i];
                currentLevel.putIfAbsent(node, new HashMap<String, Object>());
                currentLevel = (Map<String, Object>) currentLevel.get(node);
            }
            // 末尾节点存入对应预设值
            currentLevel.put(nodes[nodes.length - 1], value);
        }
        return rootMap;
    }
}

兼容说明

若需要兼容Java 8以下版本,可将putIfAbsent逻辑替换为手动判空:

if(!currentLevel.containsKey(node)) {
    currentLevel.put(node, new HashMap<String, Object>());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:03