1. Utilization scenarios
Organizational structure tree, usually there is an organizational structure table, including fields such as code (code), pcode (upper code), name (organization name)
2. Construct data (The following data is not organizational data, but purely data I made up)
List<Tree<Test>> trees = new ArrayList<Tree<Test>>();tests.add(new Test("0", "", "about me"));tests.add(new Test("1", "0", "Technical Learning"));tests.add(new Test("2", "0", "interest"));tests.add(new Test("3", "1", "JAVA"));tests.add(new Test("4", "1", "oracle"));tests.add(new Test("5", "1", "spring"));tests.add(new Test("6", "1", "springmvc"));tests.add(new Test("7", "1", "fastdfs"));tests.add(new Test("8", "1", "linux"));tests.add(new Test("9", "2", "cycling"));tests.add(new Test("10", "2", "eat, drink, play"));tests.add(new Test("11", "2", "learning"));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", "5", "aop"));tests.add(new Test("16", "1", "etc"));tests.add(new Test("17", "2", "etc"));tests.add(new Test("18", "3", "etc"));tests.add(new Test("19", "4", "etc"));tests.add(new Test("20", "5", "etc"));tests.add(new Test("20", "5", "etc"));tests.add(new Test("20", "5", "etc"));tests.add(new Test("18", "3", "etc"));tests.add(new Test("19", "4", "etc"));tests.add(new Test("20", "5", "etc"));tests.add(new Test("20", "5", "etc"));3. Source code
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> { /** * Node ID */ private String id; /** * Show node text*/ private String text; /** * Node status, open closed */ private String state = "open"; /** * Whether the node is selected true false */ private boolean checked = false; /** * Node attribute*/ private List<Map<String, Object>> attributes; /** * Children of the node*/ private List<Tree<T>> children = new ArrayList<Tree<T>>(); /** * Parent ID */ private String parentId; /** * Whether there is a parent node*/ private boolean isParent = false; /** * Whether there is a child node*/ 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;/** * Build 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("top level node"); } 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", "", "about me")); tests.add(new Test("1", "0", "Technical Learning")); tests.add(new Test("2", "0", "interest")); tests.add(new Test("3", "1", "JAVA")); tests.add(new Test("4", "1", "oracle")); tests.add(new Test("5", "1", "spring")); tests.add(new Test("6", "1", "springmvc")); tests.add(new Test("7", "1", "fastdfs")); tests.add(new Test("8", "1", "linux")); tests.add(new Test("9", "2", "cycling")); tests.add(new Test("10", "2", "eating, drinking, and having fun")); tests.add(new Test("11", "2", "learning")); 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", "5", "aop")); tests.add(new Test("16", "1", "etc")); tests.add(new Test("17", "2", "etc")); tests.add(new Test("18", "3", "etc")); tests.add(new Test("19", "4", "etc")); tests.add(new Test("20", "5", "etc")); 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. Operation results
JSON data:
{ "checked": true, "children": [ { "checked": false, "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, "children": [], "id": "18", "parent": true, "parentId": "3", "state": "open", "text": "etc" } ], "id": "3", "parent": true, "parentId": "1", "state": "open", "text": "JAVA" }, { "checked": false, "children": [ { "checked": false, "children": [], "id": "13", "parent": true, "parentId": "4", "state": "open", "text": "sql" }, { "checked": false, "children": [], "id": "19", "parent": true, "parentId": "4", "state": "open", "text": "etc" } ], "id": "4", "parent": true, "parentId": "1", "state": "open", "text": "oracle" }, { "checked": false, "children": [ { "checked": false, "children": [], "id": "14", "parent": true, "parentId": "5", "state": "open", "text": "ioc" }, { "checked": false, "children": [], "id": "15", "parent": true, "parentId": "5", "state": "open", "text": "aop" }, { "checked": false, "children": [], "id": "20", "parent": true, "parentId": "5", "state": "open", "text": "etc" } ], "id": "5", "parent": true, "parentId": "1", "state": "open", "text": "spring" }, { "checked": false, "children": [], "id": "6", "parent": true, "parentId": "1", "state": "open", "text": "springmvc" }, { "checked": false, "children": [], "id": "7", "parent": true, "parentId": "1", "state": "open", "text": "fastdfs" }, { "checked": false, "children": [], "id": "8", "parent": true, "parentId": "1", "state": "open", "text": "linux" }, { "checked": false, "children": [], "id": "16", "parent": true, "parentId": "1", "state": "open", "text": "etc" } ], "id": "1", "parent": true, "parentId": "0", "state": "open", "text": "Technical Learning" }, { "checked": false, "children": [ { "checked": false, "children": [], "id": "9", "parent": true, "parentId": "2", "state": "open", "text": "cycling" }, { "checked": false, "children": [], "id": "10", "parent": true, "parentId": "2", "state": "open", "text": "eating, drinking and having fun" }, { "checked": false, "children": [], "id": "11", "parent": true, "parentId": "2", "state": "open", "text": "learning" }, { "checked": false, "children": [], "id": "17", "parent": true, "parentId": "2", "state": "open", "text": "etc" } ], "id": "2", "parent": true, "parentId": "0", "state": "open", "text": "interest" } ], "id": "0", "parent": false, "parentId": "", "state": "open", "text": "about me" } ], "id": "-1", "parent": false, "parentId": "", "state": "open", "text": "Top Node"}The above is the full content of the Java method to produce tree structure json data based on the content of the database table. I hope everyone can support Wulin.com~