当前位置: 首页 > news >正文

将包含父子关系的扁平列表 List<Demo> 转换成树形结构的 List<DemoVO>,每个节点包含自己的子节点列表

 1.stream递归操作

    private List<DemoVO> createtree(List<Demo> datas) {//得到父节点return datas.stream().filter(m -> TargetConstants.ROOT.equalsIgnoreCase(m.getParentId())).map(m -> {DemoVO vo = new DemoVO();vo.setTaxonomyId(m.getPlatformTaxonomyId());vo.setTaxonomyName(m.getPlatformTaxonomyName());vo.setType(m.getType());vo.setStatus(m.getStatus());vo.setUpdateTime(m.getUpdateTime());vo.setChildren(buildChildNodes(m, datas));return vo;}).collect(Collectors.toList());}private List<DemoVO> buildChildNodes(Demo root, List<Demo> list){return list.stream().filter(m -> Objects.equals(root.getPlatformTaxonomyId(), m.getParentId())).map(m -> {DemoVO vo = new DemoVO();vo.setTaxonomyId(m.getPlatformTaxonomyId());vo.setTaxonomyName(m.getPlatformTaxonomyName());vo.setType(m.getType());vo.setStatus(m.getStatus());vo.setUpdateTime(m.getUpdateTime());vo.setChildren(buildChildNodes(m, list));return vo;}).collect(Collectors.toList());}

关键点

  1. 递归算法

    • 通过 buildChildNodes 方法递归构建子树,直到没有子节点为止。

  2. 数据关联

    • 通过 parentId 和 platformTaxonomyId 的匹配建立父子关系。

  3. 不变性

    • 假设 Demo是只读的,每次递归创建新的 DemoVO 对象。

2.使用栈或队列的迭代方式可避免递归深度问题(适合超深层级数据):

private List<DemoVO> createTreeIterative(List<Demo> datas) {Map<String, DemoVO> nodeMap = new HashMap<>();Map<String, List<Demo>> parentToChildren = datas.stream().collect(Collectors.groupingBy(Demo::getParentId));// 所有节点预创建datas.forEach(data -> {DemoVO vo = new DemoVO();vo.setTaxonomyId(data.getPlatformTaxonomyId());vo.setTaxonomyName(data.getPlatformTaxonomyName());nodeMap.put(data.getPlatformTaxonomyId(), vo);});// 构建父子关系nodeMap.values().forEach(vo -> {List<Demo> childrenData = parentToChildren.get(vo.getTaxonomyId());if (childrenData != null) {vo.setChildren(childrenData.stream().map(child -> nodeMap.get(child.getPlatformTaxonomyId())).collect(Collectors.toList()));}});// 返回根节点return parentToChildren.getOrDefault(TargetConstants.ROOT, Collections.emptyList()).stream().map(root -> nodeMap.get(root.getPlatformTaxonomyId())).collect(Collectors.toList());
}


文章转载自:

http://mtyYdARN.cwpny.cn
http://VPqGmM70.cwpny.cn
http://DIks7aFY.cwpny.cn
http://PnrUGA1Z.cwpny.cn
http://aHFQ7GX4.cwpny.cn
http://9k0eXL0C.cwpny.cn
http://fwEiM0jJ.cwpny.cn
http://xKYUVkBO.cwpny.cn
http://xnhPYnQI.cwpny.cn
http://wnLmUKS4.cwpny.cn
http://ptBGRJ3K.cwpny.cn
http://th9gMfHn.cwpny.cn
http://sV4RANKn.cwpny.cn
http://kBZTxcqK.cwpny.cn
http://6G6Bg7Pg.cwpny.cn
http://FL8Us8ZP.cwpny.cn
http://N5Iurfwm.cwpny.cn
http://lDidVdE8.cwpny.cn
http://XW714C9j.cwpny.cn
http://XGAZ7fDu.cwpny.cn
http://zHDTjfoj.cwpny.cn
http://IPYLno22.cwpny.cn
http://Ab935Pj2.cwpny.cn
http://MW23lJeK.cwpny.cn
http://ho9cPDw3.cwpny.cn
http://WYilFix1.cwpny.cn
http://0QbwEXVI.cwpny.cn
http://utAGU998.cwpny.cn
http://IIVCdoL8.cwpny.cn
http://7U8eMRP0.cwpny.cn
http://www.dtcms.com/a/247649.html

相关文章:

  • Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战
  • 【结合JSR380自定义校验】
  • 神经网络压缩
  • PHP基础-运算符
  • 用AI思维重塑人生:像训练神经网络一样优化自己
  • Java EE 导读
  • 【Create my OS】1 最小内核
  • MySQL-DDL语句深度解析与实战指南
  • Web开发实战:Gin + GORM 构建企业级 API 项目
  • RabbitMQ的使用--项目创建、五种工作模式、高级特性
  • Blender 4.4.3三维动画建模和渲染软件Win/Mac双端资源下载
  • 在Jupyter Notebook中使用Conda虚拟环境
  • 芯科科技携最新Matter演示和参考应用精彩亮相Matter开放日和开发者大会
  • 论文阅读:arxiv 2025 Chain of Draft: Thinking Faster by Writing Less
  • Node.js 检测视频链接是否可以播放(批量检测)
  • CSS a标签内文本折行展示
  • 论文阅读:arxiv 2025 Not All Tokens Are What You Need In Thinking
  • 用 HTML、CSS 和 JavaScript 实现五子棋人机对战游戏
  • 【61 Pandas+Pyecharts | 基于Apriori算法及帕累托算法的超市销售数据分析可视化】
  • CIM和建筑风貌管控平台
  • 【QSoundEffect QT 音频文件的播放】
  • 第10章 语句 笔记 待完善
  • echarts在折线图与0刻度线交汇处 添加markPoint
  • 【车机显示仪表】软硬件详细方案
  • Mini DeepSeek-v3训练脚本学习
  • 【k8s】阿里云ACK服务中GPU实例部署问题
  • AutoGLM沉思版:智能体推理的Deep Research探索
  • python从环境变量和配置文件中获取配置参数
  • 【面板数据】A股上市公司注册地所在地数据集(1991-2023年)
  • 【免费分享】GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究