首页 > 数据库技术 > 详细

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

时间:2019-07-12 12:02:25      阅读:120      评论:0      收藏:0      [点我收藏+]

一、引言

有时候我们从数据库中读取出了一个表的数据,比如存储的是中国的省市县的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

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

原文:https://www.cnblogs.com/JohnDawson/p/11175161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!