1. Escenarios de utilización
Árbol de estructura organizacional, generalmente hay una tabla de estructura organizacional, que incluye campos como código (código), pcode (código superior), nombre (nombre de la organización)
2. Construye datos (los siguientes datos no son datos organizacionales, sino que los datos puramente que inventé)
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 (Nuevo test ("9", "2", "ciclismo")); tests.Add (nuevo test ("10", "2", "comer, beber, jugar")); tests.add (new test ("11", "2", "aprendizaje")); tests.add (new test ("12", "3", "string"); "4", "sql")); tests.Add (nuevo test ("14", "5", "IOC")); tests.Add (nuevo test ("15", "5", "aop")); tests.add (new test ("16", "1", "etc"); tests.add (new test ("17", "2", "etc"); "3", "etc")); tests.Add (nueva prueba ("19", "4", "etc")); tests.Add (nueva prueba ("20", "5", "etc.)); tests.add (nueva prueba (" 20 "," 5 "," etc "); tests.add (nueva prueba (" 20 "," 5 "," etc.); "3", "etc")); tests.Add (nueva prueba ("19", "4", "etc")); tests.Add (nueva prueba ("20", "5", "etc")); tests.Add (nueva prueba ("20", "5", "etc"));3. Código fuente
Árbol.java
paquete 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 kang Kang217-1-7 * * */public class tree <T> identificación; / *** Mostrar texto del nodo*/ Texto de cadena privada; / ** * Estado del nodo, Abrir cerrado */ privado string state = "open"; / ** * Si el nodo está seleccionado verdadero falso */ privado booleano marcado = falso; / *** Atributo de nodo*/ Lista privada <map <string, objeto >> atributos; / *** Niños del nodo*/ Lista privada <Tree <T>> Children = New ArrayList <Tree <T>> (); / ** * ID de padres */ Cadena privada ParentId; / *** Si hay un nodo principal*/ privado booleano isparent = false; / *** Si hay un nodo infantil*/ private boolean ischildren = false; public String getId () {return id; } public void setid (ID de cadena) {this.id = id; } public String getText () {return text; } public void setText (texto de cadena) {this.text = text; } public String getState () {State de retorno; } public void setState (string state) {this.state = state; } public boolean isChecked () {return checked; } public void setChecked (boolean checked) {this.ecked = checked; } lista pública <map <string, object >> getAttributes () {return atributes; } public void setAttributes (list <map <string, object >> atributes) {this.attributes = atributes; } Lista pública <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; } árbol público (identificación de cadena, texto de cadena, estado de cadena, booleano marcado, lista <map <string, objeto >> atributos, lista <árbol <t>> niños, boolean isparent, boolean ischildren, string parentid) {super (); this.id = id; this.text = text; this.state = state; this.ecked = checked; this.attributes = atributes; this.children = niños; this.isparent = isParent; this.ischildren = isChildren; this.ParentId = ParentId; } Public Tree () {super (); } @Override public string toString () {return json.tojSonstring (this); }}Buildtree.java
paquete pers.kangxu.datautils.common.tree; import java.util.arrayList; import java.util.list; import.kangxu.datautils.bean.tree.tree;/** * construir árbol * todo * <br> * @author kangxu2 2017-1-7 * */public class buildtree @author kangxu2 2017-1-7 * * @param nodos * @return */ public static <t> tree <t> build (list <ree <t>> nodos) {if (nodos == null) {return null; } List <Tree <T>> topNodes = new ArrayList <Tree <T>> (); para (árbol <t> niños: nodos) {string pid = children.getParentId (); if (pid == null || "" .equals (pid)) {topnodes.add (niños); continuar; } for (árbol <t> parent: nodos) {string id = parent.getID (); if (id! = null && id.equals (pid)) {parent.getChildren (). add (niños); children.setParent (verdadero); parent.setchildren (verdadero); continuar; }}} Árbol <t> root = new Tree <T> (); if (topNodes.size () == 0) {root = topNodes.get (0); } else {root.setId ("-1"); root.setParentId (""); root.setParent (falso); root.setchildren (verdadero); root.setchecked (verdadero); root.setchildren (topnodes); root.settext ("nodo de nivel superior"); } return root; }}BuildTreetester.java
paquete pers.kangxu.datautils.test; import java.util.arrayList; import java.util.list; import .kangxu.datautils.bean.tree.tree; import. árboles = new ArrayList <Tree <Stest> (); Lista <Sci> Tests = New ArrayList <Schot> (); tests.Add (nueva prueba ("0", "", "Acerca de mí")); tests.Add (nueva prueba ("1", "0", "aprendizaje técnico")); tests.Add (nueva prueba ("2", "0", "interés")); tests.Add (nueva prueba ("3", "1", "java")); tests.Add (nueva prueba ("4", "1", "Oracle")); tests.Add (nueva prueba ("5", "1", "resorte")); tests.Add (nueva prueba ("6", "1", "SpringMvc")); tests.Add (nueva prueba ("7", "1", "fastdfs")); tests.Add (nueva prueba ("8", "1", "Linux")); tests.Add (nueva prueba ("9", "2", "ciclismo")); tests.Add (nueva prueba ("10", "2", "comer, beber y divertirse")); tests.Add (nueva prueba ("11", "2", "aprendizaje")); tests.Add (nueva prueba ("12", "3", "cadena")); tests.Add (nueva prueba ("13", "4", "sql")); tests.Add (nueva prueba ("14", "5", "COI")); tests.Add (nueva prueba ("15", "5", "AOP")); tests.Add (nueva prueba ("16", "1", "etc")); tests.Add (nueva prueba ("17", "2", "etc")); tests.add (nueva prueba ("18", "3", "etc")); tests.Add (nueva prueba ("19", "4", "etc")); tests.Add (nueva prueba ("20", "5", "etc")); para (prueba de prueba: pruebas) {árbol <cest> tree = new Tree <Stest> (); Tree.SetId (test.getId ()); Tree.setParentId (test.getpid ()); tree.settext (test.gettext ()); árboles.add (árbol); } Árbol <test> t = buildtree.build (árboles); System.out.println (t); }} prueba de clase {ID de cadena privada; PID de cadena privada; texto de cadena privada; public String getId () {return id; } public void setid (ID de cadena) {this.id = id; } public String getPid () {return pid; } public void setPid (string pid) {this.pid = pid; } public String getText () {return text; } public void setText (texto de cadena) {this.text = text; } test public (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. Resultados de la operación
Datos JSON:
{ "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", "Texto": "String"}, {"marcado": falso, "hijos": [], "id": "18", "Parent": True, "ParentId": "3", "Estado": "Open", "Text": "Etc"}], "id": "3", "Parent": True, "ParentId": "1", "Estado": "Abierto", "Texto": "Text": "Java," Jav ",},}," Java}, "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", "texto": "etc"}], "id": "5", "padre": verdadero, "parentId": "1", "estado": "abierto", "texto": "primavera"}, {"versado": falso, "hijos": [], "id": "6", "parent": true, "parentid": "1", "estado": "abierto", "text": "text": "springmvc", springc, springcc. "Checked": False, "Children": [], "id": "7", "ParentD": True, "ParentId": "1", "Estado": "Open", "Texto": "FastDfs"}, {"Comprobado": Falso, "Niños": [], "Id": "8", "Parent": True, "ParentId": "1", "Estado": "Open", "Open", "Text", "", "Lin. "Checked": False, "Children": [], "Id": "16", "ParentD": True, "ParentId": "1", "Estado": "Abrir", "Texto": "etc" "]," Id ":" 1 "," Parent ": True," ParentId ":" 0 "," Estado ":" abierto "," Texto ":" Aprendizaje técnico "}," "Check": "Niños": " "Checked": False, "Children": [], "Id": "9", "Parent": True, "ParentId": "2", "Estado": "Abrir", "Texto": "Ciclismo"}, {"Comprobado": Falso, "Niños": [], "ID": "10", "Parent": True, "ParentId": "2", "Estado": "Open", "Texto": "Texto", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "," }, {"versado": falso, "hijos": [], "id": "11", "padre": true, "parentId": "2", "estado": "abierto", "texto": "aprendizaje", {"comprobado": falso, "hijos": [], "id": "17", "Parent": true, "ParentId": "2", "Estado": "Open": ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",". ], "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", "texto": "nodo superior"}Lo anterior es el contenido completo del método Java para producir datos JSON de estructura de árbol en función del contenido de la tabla de la base de datos. Espero que todos puedan apoyar a Wulin.com ~