您的位置:首页 > 编程语言 > Java开发

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

2017-06-15 18:08 381 查看
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;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list tree java