频道栏目
首页 > 资讯 > 其他 > 正文

编程开发如何实现List转为Tree的

18-03-26        来源:[db:作者]  
收藏   我要投稿

编程开发如何实现List转为Tree的。

package com.xicheng.test;

import java.util.List;

/**
 * 2018年3月26日上午7:32:37
 * 树节点实体类
 */
public class TreeNode {
	private String id;
	private String parentId;
	private String name;
	private List children;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List getChildren() {
		return children;
	}
	public void setChildren(List children) {
		this.children = children;
	}
	@Override
	public String toString() {
		return "TreeNode [id=" + id + ", parentId=" + parentId + ", name=" + name + ", children=" + children + "]";
	}
	public TreeNode() {
	}
	public TreeNode(String id, String name, String parentId) {
		this.id = id;
		this.parentId = parentId;
		this.name = name;
	}
}

package com.xicheng.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class List2Tree {
	public static void main(String[] args) {
		TreeNode t1 = new TreeNode("1","p1","0");
		TreeNode t2 = new TreeNode("2","p2","0");
		TreeNode t3 = new TreeNode("3","s11","1");
		TreeNode t4 = new TreeNode("4","s12","1");
		TreeNode t5 = new TreeNode("5","s21","2");
		TreeNode t6 = new TreeNode("6","s22","2");
		TreeNode t7 = new TreeNode("7","s23","2");
		
		List treeList = new ArrayList<>();
		Collections.addAll(treeList, t1,t2,t3,t4,t5,t6,t7);
		
		
		System.out.println(toTree01(treeList));
		System.out.println(toTree02(treeList));
	}
	
	/**
	 * 方式一:使用两层循环实现
	 * @param list
	 * @return
	 */
	public static List toTree01(List treeList) {
		List retList = new ArrayList<>();
		
		for (TreeNode parent : treeList) {
			if ("0".equals(parent.getParentId())) {
				retList.add(parent);
			}
			
			for (TreeNode child : treeList) {
				if (child.getParentId() == parent.getId()) {
					if (parent.getChildren() == null) {
						parent.setChildren(new ArrayList<>());
					}
					parent.getChildren().add(child);
				}
			}
		}
		return retList;
	}
	
	/**
	 * 方式二:使用递归实现
	 * @param treeList
	 * @return
	 */
	public static List toTree02(List treeList) {
		List retList = new ArrayList<>();
		for (TreeNode parent : treeList) {
			if ("0".equals(parent.getParentId())) {
				retList.add(findChildren(parent, treeList));
			}
		}
		return retList;
	}

	private static TreeNode findChildren(TreeNode parent, List treeList) {
		for (TreeNode child : treeList) {
			if (parent.getId().equals(child.getParentId())) {
				if (parent.getChildren() == null) {
					parent.setChildren(new ArrayList<>());
				}
				parent.getChildren().add(findChildren(child, treeList));
			}
		}
		return parent;
	}
}
相关TAG标签
上一篇:「强制在线」动态图连通性
下一篇:《Android开发艺术探索》之消息机制(一)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站