list集合转Tree实现,带测试用例

package net.lubanzhang.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TreeTest {

	public static void main(String[] args) {
		TreeTest test = new TreeTest();
		test.print(test.serializeTree());

	}
	/**
	 *  序列化树
	 *  主要是利用java 对象是按引用传递方式,实现list 转 tree 的实现
	 * @2017年6月15日
	 */
	private List<Tree> serializeTree(){
		List<Dept> depts  = getSource();
		List<Tree> trees = new ArrayList<>();
		Map<String,Tree> map = new HashMap<>();
		
		for(Dept dep0 : depts){
			Tree tree0 = map.get(dep0.getId());
			if(tree0 == null){
				tree0 = new Tree();
				tree0.setId(dep0.getId());
				tree0.setName(dep0.getName());
				tree0.setParent(dep0.getParent());
				tree0.setLevel(dep0.getLevel());
				map.put(tree0.getId(), tree0);
			}
			if(tree0.getParent() == null){
				trees.add(tree0);
			}
			for(Dept dep1 : depts){
				if(dep1.getParent() == null) continue;
				if(! dep1.getParent().equals(tree0.getId()))
					continue;
				Tree tree1 = map.get(dep1.getId());
				if(tree1 == null){
					tree1 = new Tree();
					tree1.setId(dep1.getId());
					tree1.setName(dep1.getName());
					tree1.setParent(dep1.getParent());
					tree1.setLevel(dep1.getLevel());
					map.put(tree1.getId(), tree1);
				}
				if(tree0.getNodes() == null) tree0.setNodes(new ArrayList<>());
				tree0.getNodes().add(tree1);
			}
		}
		return trees;
	}
	/**
	 * 打印
	 * @param tree
	 * @2017年6月15日
	 */
	private void print(List<Tree> tree){
		for(Tree t: tree){
			System.out.println(t.getName() + "  "+t.getId()+"  " + t.getLevel() + "  " + t.getParent());
			if(t.getNodes() != null) this.print(t.getNodes());
		}
	}
	/**
	 * 数据
	 * @return
	 * @2017年6月15日
	 */
	private List<Dept> getSource(){
		List<Dept> depts = new ArrayList<>();
		Dept dept = new Dept();
		dept.setId("419c80bb744d49bda475d9d0ab2be466");
		dept.setName("行政部");
		dept.setParent(null);
		dept.setLevel(0);
		depts.add(dept);
		
		dept = new Dept();
		dept.setId("419c80bb744d49bda475d9d0ab2be472");
		dept.setName("研发部");
		dept.setParent(null);
		dept.setLevel(0);
		depts.add(dept);
		
		dept = new Dept();
		dept.setId("b3d69a365e8648acbe0b662a104b4642");
		dept.setName("java部门");
		dept.setParent("419c80bb744d49bda475d9d0ab2be472");
		dept.setLevel(1);
		depts.add(dept);
		
		dept = new Dept();
		dept.setId("b3d69a365e8648acbe0b662a104b4643");
		dept.setName("ios部门");
		dept.setParent("419c80bb744d49bda475d9d0ab2be472");
		dept.setLevel(1);
		depts.add(dept);
		
		dept = new Dept();
		dept.setId("b3d69a365e8648acbe0b662a124b4643");
		dept.setName("Android部门");
		dept.setParent("419c80bb744d49bda475d9d0ab2be472");
		dept.setLevel(1);
		depts.add(dept);
		
		dept = new Dept();
		dept.setId("b3d69a365e8648acbe0b662a104b4621");
		dept.setName("java-微信部门");
		dept.setParent("b3d69a365e8648acbe0b662a104b4642");
		dept.setLevel(2);
		depts.add(dept);
		
		return depts;
	}

	
	/**
	 * 部门信息
	 * @author yanglong
	 * @since 2017年6月15日
	 */
	private class Dept{
		private String id ;
		private String name;
		private String parent;
		private Integer level;
		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 getParent() {
			return parent;
		}
		public void setParent(String parent) {
			this.parent = parent;
		}
		public Integer getLevel() {
			return level;
		}
		public void setLevel(Integer level) {
			this.level = level;
		}
		
	}
	/**
	 * 树
	 * @author yanglong
	 * @since 2017年6月15日
	 */
	private class Tree{
		private String id ;
		private String name;
		private String parent;
		private Integer level;
		private List<Tree> nodes;
		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 getParent() {
			return parent;
		}
		public void setParent(String parent) {
			this.parent = parent;
		}
		public Integer getLevel() {
			return level;
		}
		public void setLevel(Integer level) {
			this.level = level;
		}
		public List<Tree> getNodes() {
			return nodes;
		}
		public void setNodes(List<Tree> nodes) {
			this.nodes = nodes;
		} 
		
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值