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
相关产品推荐
相关产品推荐

