标题:Java 中使用递归构建嵌套字符串路径的层级 Map 结构
发布时间 - 2026-01-28 00:00:00 点击率:次本文介绍如何将点号分隔的字符串(如 "caso.responsavel.dadospessoais.nome")解析为深度嵌套的 `map
在 Java 开发中,常需将扁平化的路径字符串(如数据库字段映射、JSON 路径或 DTO 属性路径)转换为直观的层级结构,便于可视化、权限控制或动态表单生成。本方案不依赖第三方库,仅用原生 HashMap 与递归逻辑,即可将一维字符串数组转化为多层嵌套的 Map
核心思路是:对每个路径字符串按 "\\." 拆分为节点数组(如 "caso.responsavel.nome" → ["caso", "responsavel", "nome"]),再逐层递归插入到嵌套 Map 中——若当前层级键不存在,则新建子 Map 并挂载;若已存在,则继续向下递归处理后续节点。
以下是完整可运行示例:
import java.util.*;
public class NestedPathGrouping {
public static void main(String[] args) {
String[] array = {
"caso.id",
"caso.unidadeDoCaso.id",
"caso.etiqueta",
"caso.sigiloso",
"caso.idPecaSegredoJustica",
"caso.numeroAno",
"caso.numero",
"caso.competencia.id",
"caso.competencia.ativo",
"caso.competencia.nome",
"caso.responsavel.id",
"caso.responsavel.dadosPessoais.nome",
"caso.escrivao.id",
"caso.escrivao.dadosPessoais.nome"
};
Map root = new HashMap<>();
for (String path : array) {
String[] nodes = path.split("\\.");
fill(root, nodes, 0);
}
print(root, "");
}
// 递归填充嵌套 Map
public static void fill(Map map, String[] nodes, int i) {
if (i >= nodes.length) return;
String key = nodes[i];
Object existing = map.get(key);
if (existing == null) {
// 当前节点不存在,创建新子 Map 并挂载
Map childMap = new HashMap<>();
map.put(key, childMap);
fill(childMap, nodes, i + 1);
} else if (existing instanceof Map) {
// 当前节点已存在且为 Map,继续向下填充
@SuppressWarnings("unchecked")
Map childMap = (Map) existing;
fill(childMap, nodes, i + 1);
}
// 若 existing 非 Map(如已被设为终端值),此处可抛异常或忽略——本例中所有叶子均为无值占位(仅键存在)
}
// 递归打印,支持缩进层级可视化
public static void print(Map map, String indent) {
for (String key : map.keySet()) {
System.out.println(indent + key);
Object value = map.get(key);
if (value instanceof Map) {
print((Map) value, indent + " ");
}
}
}
} 关键注意事项:
- ✅ 类型安全增强:fill() 方法中显式检查 existing instanceof Map,避免强制类型转换异常(原答案中 (Map
)(node) 存在严重逻辑错误,已修正为正确递归逻辑); - ✅ 终端节点语义清晰:本实现中,所有叶子节点(如 "id"、"
nome")均作为空子 Map 的键存在,不存储实际值;如需存储原始路径或附加元数据,可扩展 Object 值为自定义类(如 NodeValue);
- ⚠️ 不可变性提示:该结构为可变嵌套 Map,若需线程安全,请在外层包装 Collections.synchronizedMap() 或改用 ConcurrentHashMap(注意:嵌套子 Map 仍需手动同步);
- ? 扩展建议:如需反向生成所有完整路径(如 "caso.responsavel.dadosPessoais.nome"),可在 fill() 中增加路径累积参数,或单独实现 flatten(Map, String prefix) 方法。
该方案简洁、高效、无外部依赖,完美契合 Java 8+ 环境下的动态路径建模需求,是 Stream API 无法直接覆盖场景下的优雅补充。
# java
# js
# json
# node
# ai
# stream
# 字符串数组
# red
# String
# Object
# 字符串
# 强制类型转换
# 递归
# 线程
# map
# 类型转换
# 数据库
# 不存在
# 如需
# 已被
# 设为
# 均为
# 请在
# 树状
# 可在
# 自定义
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
详解jQuery中基本的动画方法
油猴 教程,油猴搜脚本为什么会网页无法显示?
网站制作企业,网站的banner和导航栏是指什么?
如何用好域名打造高点击率的自主建站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何破解联通资金短缺导致的基站建设难题?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何在IIS7上新建站点并设置安全权限?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在建站主机中优化服务器配置?
zabbix利用python脚本发送报警邮件的方法
历史网站制作软件,华为如何找回被删除的网站?
如何在云服务器上快速搭建个人网站?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
高防服务器如何保障网站安全无虞?
WEB开发之注册页面验证码倒计时代码的实现
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
如何在腾讯云服务器快速搭建个人网站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
如何制作一个表白网站视频,关于勇敢表白的小标题?
制作企业网站建设方案,怎样建设一个公司网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
如何获取免费开源的自助建站系统源码?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Bootstrap整体框架之JavaScript插件架构
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel怎么为数据库表字段添加索引以优化查询
制作电商网页,电商供应链怎么做?
网站优化排名时,需要考虑哪些问题呢?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
高防服务器租用首荐平台,企业级优惠套餐快速部署


