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; } } }
相关文章推荐
- DevExpress获取TreeList可视区域节点集合的实现方法
- 在List范型集合中实现自定义条件复杂查询
- 用泛型List实现集合类及排序功能
- c#利用链表模拟实现泛型集合List﹤T﹥
- 测试用例模板集合
- List 集合分页实现
- J2ME中实现可伸展目录树TreeList
- TestLink1.9.3测试用例:Excel转换XML工具<二>实现代码
- 关于DevExpress.XtraTreeList.TreeList控件的使用——给TreeList添加RepositoryItem以实现文本编辑功能
- (更新版)ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray)在Struts 2实现Ajax动态加载树结点
- 在List范型集合中实现自定义条件复杂查询 .
- 在List范型集合中实现自定义条件复杂查询
- DEV中的TreeList控件应用的一个小效果实现——个人总结
- Deverpress笔记之TreeList复选框实现
- 基于XML和Python实现白盒测试程序与测试用例分离
- 在List范型集合中实现自定义条件复杂查询
- ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray或通过JSP传)在Struts 2实现Ajax动态加载树结点
- 非典型2D游戏引擎 Orx 源码阅读笔记(4) 用C实现的基本容器(List,HashTable,Tree)
- TreeList控件实现数据过滤功能
- TestLink测试用例:Excel转换XML工具<二>实现代码