由于工作中好多地方需要树状结构数据,在参考了网上递归实现和数据库存储过程实现,都不太满意。突然想到zTree也有解析该类数据的要求,所以在阅读了zTree源码的前提了,按照他的实现原理,写了一个java版的实现方案

@SuppressWarnings("unchecked")
    public List<Map<String, Object>> parseTree(List<Map<String, Object>> list) {
        List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
        Map<String, Object> tmpMap = new HashMap<String, Object>();
        for (int i = 0, l = list.size(); i < l; i++) {
            tmpMap.put(String.valueOf(list.get(i).get("id")), list.get(i));
        }
        for (int i = 0, l = list.size(); i < l; i++) {
            Map<String, Object> map = list.get(i);
            //tmpMap存储的均为id为key的键值对,如果以pid为key可以取出对象,则表明该元素是父级元素
            if(tmpMap.get(map.get("pid")) != null && (map.get("id") != map.get("pid"))){
                //给当前这个父级map对象中添加key为children的ArrayList
                if ((tmpMap.get(map.get("pid")) != null) && ((Map<String, Object>) tmpMap.get(map.get("pid"))).get("children") == null) {
                    ((Map<String,Object>) tmpMap.get(map.get("pid"))).put("children", new ArrayList<Map<String, Object>>());
                }
                Map<String, Object> tmap = (Map<String, Object>) tmpMap.get(map.get("pid"));
                ArrayList<Map<String, Object>> tArrayList = (ArrayList<Map<String, Object>>) tmap.get("children");
                tArrayList.add(list.get(i));
            //没有父节点
            } else {
                resultList.add(list.get(i));
            }
        }
        
        for (int i = 0, l = list.size(); i < l; i++) {
            System.out.println("原始数据是否变化:" + list.get(i));
        }
        
        Iterator<Entry<String, Object>> iterator = tmpMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Entry<String, Object> entry = iterator.next();
            System.out.println("遍历之后:" + entry.getKey() + ":" + entry.getValue());
        }
        return resultList;
    }
数据库中的测试数据

解析完成后树状结构如下


--------------------- 
作者:AugSnow 
来源:CSDN 
原文:https://blog.csdn.net/yb642518034/article/details/52824729 
版权声明:本文为博主原创文章,转载请附上博文链接!

Java树形结构解析相关推荐

  1. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据 a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCH ...

  2. java 树状数据算法_使用递归算法结合数据库解析成Java树形结构的代码解析

    这篇文章主要介绍了使用递归算法结合数据库解析成Java树形结构的代码解析的相关资料,需要的朋友可以参考下 1.准备表结构及对应的表数据 a.表结构:create table TB_TREE ( CID ...

  3. Java树形结构模糊搜索,模糊匹配

    Java树形结构模糊搜索,模糊匹配 相关类结构 核心代码 辅助类--树结构基类 辅助类--测试类 测试代码 发现含有州的市有 43 个 相关类结构 核心代码 package com.demo;impo ...

  4. java树形结构查询优化

    java树形结构查询优化 public class TreeTest {// 定义全局变量,统计地柜中总的循环次数private static int time;/*** 初始化数据,模拟从数据查询出 ...

  5. Java树形结构的实现

    Java树形结构的实现 文章目录 Java树形结构的实现 TreeNode接口 工具类TreeUtil 使用 TreeNode接口 public interface TreeNode<T> ...

  6. JAVA内存结构解析

    原文链接:http://tryenough.com/java-memory-structure 更多:http://tryenough.com/type-android Java内存结构大体示意图: ...

  7. Java树形结构筛选

    Java树形筛选算法 提示:使用递归方法,个人在项目中有使用到,有问题希望指出: 使用场景:当我们得到一个树形结构数据时,可能需要在树形结构上对数据进行筛选,例如通过文件夹(文件)名称模糊查询相关的文 ...

  8. 一步一步实现一个Java树形结构体方法

    废话不多说 ,实现一个树型结构体首先得需要一个对象来装载需要的结构数据: // idprivate Integer id;// 节点名称private String name;// 选中状态priva ...

  9. Java 树形结构目录树的几种生成方式

    使用场景

最新文章

  1. 打印零与奇偶数(多线程)
  2. 第四课.KNN电影推荐
  3. 多行显示的UIButton
  4. 设计模式——单例模式(懒汉模式,饿汉模式)
  5. protobuf的安装和使用
  6. php编写一个投票程序,实例学习PHP之投票程序篇(一)
  7. 限定某个目录禁止解析php、限制user_agent、php相关配置(php日志)
  8. python第三十一课--递归(3.递归的弊端)
  9. 鸿蒙手表升级计划,鸿蒙升级第一夜,服务器崩了!各机型升级排期表来了
  10. 奇妙生活-神奇的数字-1的故事
  11. Windows界面编程第十二篇 位图显示特效 飞入效果与伸展效果
  12. 2008 r2 server sql 中文版补丁_sql server 2008 r2 sp2免费版补丁
  13. 全链路压测实施思路流程分析
  14. C语言入门——printf(““)左对齐与右对齐问题
  15. PHP将商品详情中的尺码表重新进行数据整合并翻译
  16. h5页面定位偏移的问题--解答
  17. P01914100尹自杨
  18. Easy-x的基础教程使用介绍
  19. caffe生成lmdb数据集的脚本
  20. C语言函数及复杂数据结构的综合应用——简单户籍管理系统

热门文章

  1. bootstrap3- 导航条 - 慕课笔记
  2. ImportError: cannot import name ‘calinski_harabaz_score‘ from ‘sklearn.metrics‘
  3. PaddleOCR实践之飞桨常规赛:中文场景文字识别
  4. 计算机中专升大专难不难,自考大专难吗?
  5. 学习Python 霍兰德人格分析雷达图
  6. 这是我所收集的一些工具网站
  7. Jacobi迭代法分量形式matlab,实验一线性方程组迭代法实验.doc
  8. 行政服务中心大厅3D导航引导系统建设方案
  9. BLE之广播参数与广播间隔等说明
  10. vue+elementUI实战之网易云音乐--半月总结!!!