1、利用场景
组织机构树,通常会有组织机构表,其中有code(代码),pcode(上级代码),name(组织名称)等字段
2、构造数据(以下数据并不是组织机构数据,而纯属本人胡编乱造的数据)
List<Tree<Test>> trees = new ArrayList<Tree<Test>>(); tests.add(new Test("0","","关于本人")); tests.add(new Test("1","0","技术学习")); tests.add(new Test("2","兴趣")); tests.add(new Test("3","1","JAVA")); tests.add(new Test("4","oracle")); tests.add(new Test("5","spring")); tests.add(new Test("6","springmvc")); tests.add(new Test("7","fastdfs")); tests.add(new Test("8","linux")); tests.add(new Test("9","2","骑行")); tests.add(new Test("10","吃喝玩乐")); tests.add(new Test("11","学习")); tests.add(new Test("12","3","String")); tests.add(new Test("13","4","sql")); tests.add(new Test("14","5","ioc")); tests.add(new Test("15","aop")); tests.add(new Test("16","等等")); tests.add(new Test("17","等等")); tests.add(new Test("18","等等")); tests.add(new Test("19","等等")); tests.add(new Test("20","等等"));
3、源码
Tree.java
package pers.kangxu.datautils.bean.tree; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; /** * tree TODO <br> * * @author kangxu2 2017-1-7 * */ public class Tree<T> { /** * 节点ID */ private String id; /** * 显示节点文本 */ private String text; /** * 节点状态,open closed */ private String state = "open"; /** * 节点是否被选中 true false */ private boolean checked = false; /** * 节点属性 */ private List<Map<String,Object>> attributes; /** * 节点的子节点 */ private List<Tree<T>> children = new ArrayList<Tree<T>>(); /** * 父ID */ private String parentId; /** * 是否有父节点 */ private boolean isParent = false; /** * 是否有子节点 */ private boolean isChildren = false; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getState() { return state; } public void setState(String state) { this.state = state; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public List<Map<String,Object>> getAttributes() { return attributes; } public void setAttributes(List<Map<String,Object>> attributes) { this.attributes = attributes; } public List<Tree<T>> getChildren() { return children; } public void setChildren(List<Tree<T>> children) { this.children = children; } public boolean isParent() { return isParent; } public void setParent(boolean isParent) { this.isParent = isParent; } public boolean isChildren() { return isChildren; } public void setChildren(boolean isChildren) { this.isChildren = isChildren; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public Tree(String id,String text,String state,boolean checked,List<Map<String,Object>> attributes,List<Tree<T>> children,boolean isParent,boolean isChildren,String parentID) { super(); this.id = id; this.text = text; this.state = state; this.checked = checked; this.attributes = attributes; this.children = children; this.isParent = isParent; this.isChildren = isChildren; this.parentId = parentID; } public Tree() { super(); } @Override public String toString() { return JSON.toJSONString(this); } }
BuildTree.java
package pers.kangxu.datautils.common.tree; import java.util.ArrayList; import java.util.List; import pers.kangxu.datautils.bean.tree.Tree; /** * 构建tree * TODO * <br> * @author kangxu2 2017-1-7 * */ public class BuildTree { /** * * TODO * <br> * @author kangxu2 2017-1-7 * * @param nodes * @return */ public static <T> Tree<T> build(List<Tree<T>> nodes) { if(nodes == null){ return null; } List<Tree<T>> topNodes = new ArrayList<Tree<T>>(); for (Tree<T> children : nodes) { String pid = children.getParentId(); if (pid == null || "".equals(pid)) { topNodes.add(children); continue; } for (Tree<T> parent : nodes) { String id = parent.getId(); if (id != null && id.equals(pid)) { parent.getChildren().add(children); children.setParent(true); parent.setChildren(true); continue; } } } Tree<T> root = new Tree<T>(); if (topNodes.size() == 0) { root = topNodes.get(0); } else { root.setId("-1"); root.setParentId(""); root.setParent(false); root.setChildren(true); root.setChecked(true); root.setChildren(topNodes); root.setText("顶级节点"); } return root; } }
BuildTreeTester.java
package pers.kangxu.datautils.test; import java.util.ArrayList; import java.util.List; import pers.kangxu.datautils.bean.tree.Tree; import pers.kangxu.datautils.common.tree.BuildTree; public class BuildTreeTester { public static void main(String[] args) { List<Tree<Test>> trees = new ArrayList<Tree<Test>>(); List<Test> tests = new ArrayList<Test>(); tests.add(new Test("0","关于本人")); tests.add(new Test("1","技术学习")); tests.add(new Test("2","兴趣")); tests.add(new Test("3","JAVA")); tests.add(new Test("4","oracle")); tests.add(new Test("5","spring")); tests.add(new Test("6","springmvc")); tests.add(new Test("7","fastdfs")); tests.add(new Test("8","linux")); tests.add(new Test("9","骑行")); tests.add(new Test("10","吃喝玩乐")); tests.add(new Test("11","学习")); tests.add(new Test("12","String")); tests.add(new Test("13","sql")); tests.add(new Test("14","ioc")); tests.add(new Test("15","aop")); tests.add(new Test("16","等等")); tests.add(new Test("17","等等")); tests.add(new Test("18","等等")); tests.add(new Test("19","等等")); tests.add(new Test("20","等等")); for (Test test : tests) { Tree<Test> tree = new Tree<Test>(); tree.setId(test.getId()); tree.setParentId(test.getPid()); tree.setText(test.getText()); trees.add(tree); } Tree<Test> t = BuildTree.build(trees); System.out.println(t); } } class Test { private String id; private String pid; private String text; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Test(String id,String pid,String text) { super(); this.id = id; this.pid = pid; this.text = text; } public Test() { super(); } @Override public String toString() { return "Test [id=" + id + ",pid=" + pid + ",text=" + text + "]"; } }
4、运行结果
JSON数据:
{ "checked": true,"children": [ { "checked": false,"children": [ { "checked": false,"children": [ { "checked": false,"children": [ { "checked": false,"children": [],"id": "12","parent": true,"parentId": "3","state": "open","text": "String" },{ "checked": false,"id": "18","text": "等等" } ],"id": "3","parentId": "1","text": "JAVA" },{ "checked": false,"id": "13","parentId": "4","text": "sql" },"id": "19","id": "4","text": "oracle" },"id": "14","parentId": "5","text": "ioc" },"id": "15","text": "aop" },"id": "20","id": "5","text": "spring" },"id": "6","text": "springmvc" },"id": "7","text": "fastdfs" },"id": "8","text": "linux" },"id": "16","text": "等等" } ],"id": "1","parentId": "0","text": "技术学习" },{ "checked": false,"id": "9","parentId": "2","text": "骑行" },"id": "10","text": "吃喝玩乐" },"id": "11","text": "学习" },"id": "17","id": "2","text": "兴趣" } ],"id": "0","parent": false,"parentId": "","text": "关于本人" } ],"id": "-1","text": "顶级节点" }
以上就是小编为大家带来的java根据数据库表内容生产树结构json数据的方法全部内容了,希望大家多多支持编程小技巧~