@Override
public List<Map<String, Object>> queryListTree() {
List<Map<String,Object>> treeList = new ArrayList<>(); //结果list
List<Map<String,Object>> list = reportDao.queryListTree(new HashMap<>()); //查出所有数据list(避免多次连接数据库)
for (Map<String, Object> report : list) {
if("-1".equals(report.get("rptPid")+"")){ //根节点判断
//userTree.remove(user);
ArrayList<Map<String,Object>> newList = new ArrayList<>();//list遍历过程中不允许remove操作,所以新new一个list
newList.addAll(list);
newList.remove(report);//移除本次节点,减少递归次数
Map<String,Object> userMap = TreeList(report,newList);//递归方法
treeList.add(userMap);
}
}
return treeList;
} /**
* 递归拼装子节点
* @Title: TreeList
* @param @param user
* @param @param userTree
* @param @return
* @return Map<String,Object>
*/
private Map<String,Object> TreeList(Map<String,Object> report,List<Map<String,Object>> newList) {
List<Map<String,Object>> childreList = new ArrayList<>();//子节点list for(Map<String,Object> newReport : newList){
if(report.get("id").equals(newReport.get("rptPid"))){//判断是否当前节点的子节点
String level = newReport.get("rptLevel")+"";//0:文件夹 1:模板
//userTree.remove(userC);
if("1".equals(level)){ //叶子节点 -- 不用递归
childreList.add(newReport);
continue;
}
//新的list 模拟remove当前节点
ArrayList<Map<String,Object>> newList2 = new ArrayList<>();
newList2.addAll(newList);
newList2.remove(newReport);
//递归
Map<String, Object> userL = TreeList(newReport, newList2);
childreList.add(userL);
}
}
if("0".equals(report.get("rptLevel")+"")){//父节点
report.put("children", childreList);
//解决父节点无孩子是图标显示为叶子问题
if(childreList.isEmpty())
report.put("state", "closed");
}
return report;
}

数据

递归拼装Tree结构数据的更多相关文章

  1. 使用Map辅助拼装树状结构,消除递归调用

    目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...

  2. java递归算法实现拼装树形JSON数据

    有时候页面需要使用jQuery easy ui中的combotree,需要给combotree提供一个JSON数据,使用如下方法(递归)实现(下面是dao层的实现层): /** * 根据表名和父id拼 ...

  3. 【Raspberry Pi】新入手的Raspberry Pi3拼装日志

    一.概述 2016年暑假某宝入手Raspberry Pi 3,装机清单: 树莓派主板 亚克力外壳 小风扇 散热片 30G SD card 螺丝若干颗 因机型问题,可能与你的机器有微小差异 二.装机过程 ...

  4. Ibatis动态拼装sql,常用标签总结及举栗子。

    今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...

  5. JS 拼装代码的HTML onClick方法传递字符串

    有时会在JS中拼装HTML代码,这时在HTML中出现的onClick()方法中: 1.出现传递Num型的数据,直接拼装进去即可: 2.可能会出现传递字符串的情况,处理方法比较特殊,如下: a:直接字符 ...

  6. JS下高效拼装字符串的几种方法比较与测试代码

    在使用Ajax提交信息时,我可能常常需要拼装一些比较大的字符串通过XmlHttp来完成POST提交.尽管提交这样大的信息的做法看起来并不优雅,但有时我们可能不得不面对这样的需求.那么JavaScrip ...

  7. JS中字符串拼装 单双引号的处理 字符转义

    js中可能会用到动态追加元素,可能数据也是从后台传过来的,当然有两种思路, 1.在后台拼装好直接返回; 2.在前台js里面拼装, 如果拼装大量的html时可能单双引号就容易出问题;那么如何解决呢?最近 ...

  8. sqlserver2008 中使用MSXML2.ServerXMLHttp拼装soap调用webservice

    要调用的接口方法:UP_ACC_inst_Info(string xml) 接口参数:xml格式的字符串 接口功能:传递人员编号.备注到接口进行更新,接口返回更新结果. 实例: declare @st ...

  9. RTSP 消息拼装实例代码

    整理了下之前文章提到的RTSP实例的代码,主要是拼装各类消息字段. 首先,抽取一个公共函数,用来根据消息类型,生成不同的format,供sprintf试用. char * GetRTSPCmd( co ...

随机推荐

  1. Robberies HDU - 2955

    直接说题意吧.(什么网友bb了半天题都说不清楚) 给了  P  表示大于这个概率一定被抓住.则P表示被抓住的概率.N表示现在有的银行,pi表示被抓的概率嘛. 然后,就看数学了.肯定不能算被抓的概率啊. ...

  2. 20145236《网络攻防》 Exp3 免杀原理与实践

    20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...

  3. Python基础(6)——装饰器

    装饰器: def w1(func): def inner(): # 验证1 # 验证2 # 验证3 return func() return inner @w1 def f1(): print 'f1 ...

  4. webpack4对第三方库css,项目全局css和vue内联css文件提取到单独的文件(二十二)

    在讲解提取css之前,我们先看下项目的架构如下结构: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有 ...

  5. python 3.6练习题(仿购物车)

    opop = [ ('Iphone', 9800), ('Bike', 800), ('Mac Pro', 12000), #定义商品列表 ('Pyhon book', 120), ('Telas', ...

  6. 在模拟器上运行Android项目时报错:DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs

    今天在Android Studio自带的模拟器上运行项目的时候,出现如下所示Error:当点击ok后,发现模拟器不能运行程序. 解决办法: 更改Android Studio中的设置: File---& ...

  7. 你想要的Python面试都在这里了【315+道题】

    写在前面 近日恰逢学生临近毕业,课程后期大家"期待+苦逼"的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话 ...

  8. 源码分享篇:使用Python进行QQ批量登录

    直接上源码 1 #coding=utf-8 2 __author__ = 'Eagle' 3 import os 4 import time 5 import win32gui 6 import wi ...

  9. LOJ564 613的天网 构造

    题目传送门 题意:给出一个$N \times N \times N$的方块,你可以在每一个$1 \times 1 \times 1的方块上放上一个摄像头,摄像头的监视范围为6个方向的无限远距离.问最少 ...

  10. eclipse 打包

    add directory entries 不勾选, spring 自动扫描之类的扫描不到