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", "0", "兴趣"));
- 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", "骑行"));
- tests.add(new Test("10", "2", "吃喝玩乐"));
- tests.add(new Test("11", "2", "学习"));
- 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", "等等"));
- tests.add(new Test("17", "2", "等等"));
- tests.add(new Test("18", "3", "等等"));
- tests.add(new Test("19", "4", "等等"));
- tests.add(new Test("20", "5", "等等"));
复制代码
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", "0", "技术学习"));
- tests.add(new Test("2", "0", "兴趣"));
- 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", "骑行"));
- tests.add(new Test("10", "2", "吃喝玩乐"));
- tests.add(new Test("11", "2", "学习"));
- 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", "等等"));
- tests.add(new Test("17", "2", "等等"));
- tests.add(new Test("18", "3", "等等"));
- tests.add(new Test("19", "4", "等等"));
- tests.add(new Test("20", "5", "等等"));
-
- 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,
- "children": [],
- "id": "18",
- "parent": true,
- "parentId": "3",
- "state": "open",
- "text": "等等"
- }
- ],
- "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": "等等"
- }
- ],
- "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": "等等"
- }
- ],
- "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": "等等"
- }
- ],
- "id": "1",
- "parent": true,
- "parentId": "0",
- "state": "open",
- "text": "技术学习"
- },
- {
- "checked": false,
- "children": [
- {
- "checked": false,
- "children": [],
- "id": "9",
- "parent": true,
- "parentId": "2",
- "state": "open",
- "text": "骑行"
- },
- {
- "checked": false,
- "children": [],
- "id": "10",
- "parent": true,
- "parentId": "2",
- "state": "open",
- "text": "吃喝玩乐"
- },
- {
- "checked": false,
- "children": [],
- "id": "11",
- "parent": true,
- "parentId": "2",
- "state": "open",
- "text": "学习"
- },
- {
- "checked": false,
- "children": [],
- "id": "17",
- "parent": true,
- "parentId": "2",
- "state": "open",
- "text": "等等"
- }
- ],
- "id": "2",
- "parent": true,
- "parentId": "0",
- "state": "open",
- "text": "兴趣"
- }
- ],
- "id": "0",
- "parent": false,
- "parentId": "",
- "state": "open",
- "text": "关于本人"
- }
- ],
- "id": "-1",
- "parent": false,
- "parentId": "",
- "state": "open",
- "text": "顶级节点"
- }
复制代码
以上就是小编为大家带来的java根据数据库表内容生产树结构json数据的方法全部内容了,希望大家多多支持程序员之家~ |