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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM