• java—将数据库读取的list转tree


    一、引言

    有时候我们从数据库中读取出了一个表的数据,比如存储的是中国的省市县的ID、名称与父节点ID,读出来的数据并不是前台想要的,这个时候我们要想法处理一下都出来的list,将它变为一个树。

    比如直接查出来是图(1)的数据,我们要的效果是图(2)的数据

    图(1)

    图(2)

    二、使用过程

    1、新建TreeNode实体类,对应数据库中的数据

    public class TreeNode{  
        private String id;//本节点id
        private String name;//本节点名称
        private String parentId;//本节点的父节点
        private List<TreeNode> children;
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getParentId() {
    		return parentId;
    	}
    	public void setParentId(String parentId) {
    		this.parentId = parentId;
    	}
    	public List<TreeNode> getChildren() {
    		return children;
    	}
    	public void setChildren(List<TreeNode> children) {
    		this.children = children;
    	}
    } 
    

    2、新建TreeUtil类处理list(分别使用两层遍历与递归的方法实现)

    public class TreeUtil {
     
    	  /** 
         * 两层循环实现建树 
         * @param treeNodes 传入的树节点列表 
         * @return 
         */  
        public static List<TreeNode> bulid(List<TreeNode> treeNodes) {  
      
            List<TreeNode> trees = new ArrayList<TreeNode>();  
      
            for (TreeNode treeNode : treeNodes) {  
      
                if ("0".equals(treeNode.getParentId())) {  
                    trees.add(treeNode);  
                }  
      
                for (TreeNode it : treeNodes) {  
                    if (it.getParentId().equals(treeNode.getId()) ) {  
                        if (treeNode.getChildren() == null) {  
                            treeNode.setChildren(new ArrayList<TreeNode>());  
                        }  
                        treeNode.getChildren().add(it);  
                    }  
                }  
            }  
            return trees;  
        }  
      
        /** 
         * 使用递归方法建树 
         * @param treeNodes 
         * @return 
         */  
        public static List<TreeNode> buildByRecursive(List<TreeNode> treeNodes) {  
            List<TreeNode> trees = new ArrayList<TreeNode>();  
            for (TreeNode treeNode : treeNodes) {  
                if ("0".equals(treeNode.getParentId())) {  
                    trees.add(findChildren(treeNode,treeNodes));  
                }  
            }  
            return trees;  
        }  
      
        /** 
         * 递归查找子节点 
         * @param treeNodes 
         * @return 
         */  
        public static TreeNode findChildren(TreeNode treeNode,List<TreeNode> treeNodes) {  
        	treeNode.setChildren(new ArrayList<TreeNode>());
            for (TreeNode it : treeNodes) {  
                if(treeNode.getId().equals(it.getParentId())) {  
                    if (treeNode.getChildren() == null) {  
                        treeNode.setChildren(new ArrayList<TreeNode>());  
                    }  
                    treeNode.getChildren().add(findChildren(it,treeNodes));  
                }  
            }  
            return treeNode;  
        }  
    }
    
    

    3、将数据库中的数据保存到list数组中,调用TreeUtil中的处理函数

    调用递归方法

    TreeUtil.buildByRecursive(menuList);
    

    调用两层遍历的方法

    TreeUtil.bulid(menuList);
    

    转载自:https://blog.csdn.net/xcymorningsun/article/details/79254819

  • 相关阅读:
    Go_海量用户即时通讯系统
    Golang redis学习指南
    Golang 操作_Redis
    十七、Redis
    十六、网络编程-tcp socket编程
    十五、反射
    十四、goroutine(协程)和channel(管道)
    Jmeter笔记(9)Jmeter 性能测试资源监控方法(本地与服务器)(转)
    Fiddler笔记(8)重装时清除已有证书及解决tunnel to 443问题
    Jmeter笔记(8)Jmeter与MySql连接
  • 原文地址:https://www.cnblogs.com/JohnDawson/p/11175161.html
Copyright © 2020-2023  润新知