zoukankan      html  css  js  c++  java
  • 递归拼装Tree结构数据

        @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;
        }

    数据

  • 相关阅读:
    NullPointerException
    面试oracle 经常问的一个问题- 事务
    python 之 import、from、as 关键字的 白话 解释与例子
    python 学习 之 第二章(条件、循环和其他语句)
    python学习 之 第一章 (简单例子与常用数据类型)
    python中常用函数含义记录
    python 2 版本中的input() 和 raw_input() 函数的比较
    字符串处理关键字str 和 repr
    文件操作-一个可以直接复制文件数据的小程序
    C语言 32个关键字
  • 原文地址:https://www.cnblogs.com/caoyajun33-blog/p/7886432.html
Copyright © 2011-2022 走看看