Heim > Java > javaLernprogramm > Hauptteil

Java-Methode zum Generieren von JSON-Daten mit Baumstruktur basierend auf dem Inhalt der Datenbanktabelle

高洛峰
Freigeben: 2017-01-10 11:47:48
Original
1075 Leute haben es durchsucht

1. Nutzungsszenario

Organisationsbaum, normalerweise gibt es eine Organisationstabelle, die Code (Code), Pcode (übergeordneter Code), Name (Organisationsname) und andere Felder enthält

2. Daten erstellen (die folgenden Daten sind keine Organisationsdaten, sondern rein von mir zusammengestellt)

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", "等等"));
Nach dem Login kopieren

3. Quellcode

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);
  }
 
}
Nach dem Login kopieren

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;
  }
 
}
Nach dem Login kopieren

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 + "]";
  }
 
}
Nach dem Login kopieren

4. Laufergebnisse

JSON-Daten:

{
  "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": "顶级节点"
}
Nach dem Login kopieren

Das Obige ist die gesamte Methode zur Java-Erstellung von Baumstruktur-JSON-Daten basierend auf dem Inhalt der vom Editor bereitgestellten Datenbanktabelle. Ich hoffe, dass jeder die chinesische PHP-Website unterstützt ~

Mehr Java-Produktion basierend auf dem Inhalt Artikel zur Baumstruktur-JSON-Datenmethode finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage