1. سيناريوهات الاستخدام
شجرة الهيكل التنظيمي ، عادة ما يكون هناك جدول هيكل تنظيمي ، بما في ذلك حقول مثل الكود (الرمز) ، PCODE (الرمز العلوي) ، الاسم (اسم المنظمة)
2. بناء البيانات (البيانات التالية ليست بيانات تنظيمية ، ولكن البيانات البحتة التي قمت بإنشائها)
قائمة <Tree <test >> trees = new ArrayList <tree <Test> () ؛ tests.add (اختبار جديد ("0" ، "" ، "عني")) "java") ؛ tests.add (اختبار جديد ("4" ، "1" ، "Oracle")) ؛ tests.add (اختبار جديد ("5" ، "1" ، "الربيع")) "1" ، "Linux")) ؛ tests.add (اختبار جديد ("9" ، "2" ، "ركوب الدراجات")) "4" ، "sql")) ؛ tests.add (اختبار جديد ("14" ، "5" ، "IOC")) "3" ، "etc")) ؛ tests.add (اختبار جديد ("19" ، "4" ، "إلخ"))) "3" ، "etc")) ؛ tests.add (اختبار جديد ("19" ، "4" ، "إلخ"))3. رمز المصدر
Tree.java
package pers.kangxu.datautils.bean.tree ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد com.alibaba.fastjson.json ؛/** * Tree toDo <br> * * author kangxu2 2017-1-7 * / *** إظهار نص العقدة*/ نص سلسلة خاصة ؛ / ** * حالة العقدة ، افتح مغلقة */ string state = "Open" ؛ / ** * ما إذا كانت العقدة تم تحديدها خطأ */ boolean private تم فحصها = false ؛ / *** سمة العقدة*/ قائمة خاصة <map <string ، object >> السمات ؛ / *** أطفال العقدة*/ القائمة الخاصة <tree <t >> الأطفال = ArrayList جديد <tree <t >> () ؛ / ** * معرف الوالدين */ سلسلة خاصة ParentId ؛ / *** ما إذا كان هناك عقدة أولياء*/ iSparent isParent = false ؛ / *** ما إذا كانت هناك عقدة طفل*/ iSchildren الخاصة = false ؛ السلسلة العامة getId () {معرف الإرجاع ؛ } public void setId (string id) {this.id = id ؛ } السلسلة العامة getText () {return text ؛ } public void setText (string text) {this.text = text ؛ } السلسلة العامة getState () {return state ؛ } public void setState (String State) {this.state = state ؛ } boolean public ischecked () {return checked ؛ } public void setChecked (فحص منطقي) {this.checked = checked ؛ } القائمة العامة <map <string ، Object >> getAttributes () {return entributes ؛ } public void setattributes (قائمة <map <string ، object >> السمات) {this.attributes = entributes ؛ } القائمة العامة <tree <t>> getChildren () {return children ؛ } public void setchildren (قائمة <tree <t >> الأطفال) {this.children = children ؛ } boolean public isParent () {return isParent ؛ } public void setParent (boolean isParent) {this.isparent = isParent ؛ } ischildren public boolean () {return ischildren ؛ } public void setchildren (ischildren boolean) {this.ischildren = ischildren ؛ } السلسلة العامة getParentId () {return ParentId ؛ } public void setParentId (String parentId) {this.parentId = parentId ؛ } الشجرة العامة (معرف السلسلة ، نص السلسلة ، حالة السلسلة ، فحص منطقي ، قائمة <map <string ، object >> السمات ، القائمة <tree <t >> الأطفال ، isparent boolean ، ischildren boolean ، String parentid) {super () ؛ this.id = id ؛ this.text = text ؛ this.state = الدولة ؛ هذا. this.attributes = سمات ؛ هذا. this.isparent = isParent ؛ this.ischildren = ischildren ؛ this.parentId = parentId ؛ } الشجرة العامة () {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 ؛ Author Kangxu2 2017-1-7 * * param nodes * regurn */ public static <T> tree <t> build (list <tree <t >> nodes) {if (noles == null) {return null ؛ } قائمة <Tree <T >> TopNodes = new ArrayList <Tree <T >> () ؛ لـ (tree <t> الأطفال: العقد) {string pid = kndring.getParentId () ؛ if (pid == null || "" .equals (pid)) {topnodes.add (children) ؛ يكمل؛ } لـ (شجرة <T> الأصل: العقد) {string id = parent.getId () ؛ if (id! = null && id.equals (pid)) {parent.getChildRen (). add (children) ؛ الأطفال. Parent.Setchildren (True) ؛ يكمل؛ }}} شجرة <T> الجذر = شجرة جديدة <T> () ؛ if (topNodes.size () == 0) {root = topNodes.get (0) ؛ } آخر {root.setId ("-1") ؛ root.setParentId ("") ؛ root.setParent (false) ؛ root.Setchildren (true) ؛ root.setchecked (صحيح) ؛ root.Setchildren (topnodes) ؛ root.settext ("Top Level Node") ؛ } جذر الإرجاع ؛ }}BuildTreetester.java
package pers.kangxu.datautils.test ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد pers.kangxu.datautils.bean.tree.tre قائمة <Tree <test> Trees = new ArrayList <tree <test> () ؛ قائمة <Test> tests = new ArrayList <Test> () ؛ tests.add (اختبار جديد ("0" ، "" ، "عني")) ؛ tests.add (اختبار جديد ("1" ، "0" ، "التعلم الفني")) ؛ tests.add (اختبار جديد ("2" ، "0" ، "الاهتمام")) ؛ tests.add (اختبار جديد ("3" ، "1" ، "java")) ؛ tests.add (اختبار جديد ("4" ، "1" ، "Oracle")) ؛ tests.add (اختبار جديد ("5" ، "1" ، "الربيع")) ؛ tests.add (اختبار جديد ("6" ، "1" ، "springmvc")) ؛ tests.add (اختبار جديد ("7" ، "1" ، "fastdfs")) ؛ tests.add (اختبار جديد ("8" ، "1" ، "Linux")) ؛ tests.add (اختبار جديد ("9" ، "2" ، "ركوب الدراجات")) ؛ tests.add (اختبار جديد ("10" ، "2" ، "الأكل ، الشرب ، والاستمتاع")) ؛ tests.add (اختبار جديد ("11" ، "2" ، "التعلم")) ؛ tests.add (اختبار جديد ("12" ، "3" ، "سلسلة")) ؛ tests.add (اختبار جديد ("13" ، "4" ، "SQL")) ؛ tests.add (اختبار جديد ("14" ، "5" ، "IOC")) ؛ tests.add (اختبار جديد ("15" ، "5" ، "aop")) ؛ tests.add (اختبار جديد ("16" ، "1" ، "etc")) ؛ tests.add (اختبار جديد ("17" ، "2" ، "etc")) ؛ tests.add (اختبار جديد ("18" ، "3" ، "etc")) ؛ tests.add (اختبار جديد ("19" ، "4" ، "إلخ")) ؛ tests.add (اختبار جديد ("20" ، "5" ، "etc")) ؛ لـ (اختبار الاختبار: الاختبارات) {tree <test> شجرة = شجرة جديدة <test> () ؛ tree.setId (test.getId ()) ؛ tree.setParentId (test.getPid ()) ؛ tree.settext (test.getText ()) ؛ Trees.Add (شجرة) ؛ } شجرة <test> t = buildTree.Build (الأشجار) ؛ system.out.println (t) ؛ }} اختبار الفئة {معرف السلسلة الخاص ؛ سلسلة خاصة نص سلسلة خاصة ؛ السلسلة العامة getId () {معرف الإرجاع ؛ } public void setId (string id) {this.id = id ؛ } السلسلة العامة getPid () {return pid ؛ } public void setPid (String pid) {this.pid = pid ؛ } السلسلة العامة getText () {return text ؛ } public void setText (string text) {this.text = text ؛ } الاختبار العام (معرف السلسلة ، pid سلسلة ، نص سلسلة) {super () ؛ this.id = id ؛ this.pid = pid ؛ this.text = text ؛ } اختبار عام () {super () ؛ } Override public string toString () {return "test [id =" + id + "، pid =" + pid + "، text =" + text + "]" ؛ }}4. نتائج التشغيل
بيانات JSON:
{"فحص": صواب ، "أطفال": [{"{" "النص": "سلسلة"} ، {"تم التحقق منها": خطأ ، "أطفال": [] ، "معرف": "18" ، "الوالد": صواب ، "ParentId": "3" ، "الحالة": "مفتوحة" ، "نص": "etc"}] ، "id": "3" ، "الوالدين": " "فحص": خطأ ، "أطفال": [{"فحص": خطأ ، "أطفال": [] ، "معرف": "13" ، "الوالد": "صواب ،" ParentID ":" 4 "،" الحالة ":" مفتوحة "،" نص ":" expal ":" expantid: ". "النص": "etc"}] ، "id": "4" ، "الوالد": صحيح ، "ParentId": "1" ، "الحالة": "مفتوحة" ، "نص": "oracle" ، {" "النص": "IOC"} ، {"فحص": خطأ ، "أطفال": [] ، "معرف": "15" ، "الوالد": "صواب ،" ParentId ":" 5 "،" الحالة ":" Open "،" Text ":" AOP} ، {"" "النص": "etc"}] ، "id": "5" ، "Parent": True ، "ParentId": "1" ، "State": "Open" ، "Text": "Spring"} ، {"" schected ": false ، "فحص": خطأ ، "أطفال": [] ، "معرف": "7" ، "الوالد": صحيح ، "ParentId": "1" ، "الحالة": "مفتوح" ، "نص": "fastdfs"} ، {" "فحص": خطأ ، "أطفال": [] ، "معرف": "16" ، "الوالد": صحيح ، "ParentId": "1" ، "الحالة": "مفتوحة" ، "نص": "etc"}] ، "id": "فحص": خطأ ، "أطفال": [] ، "معرف": "9" ، "الوالد": صحيح ، "ParentId": "2" ، "الحالة": "مفتوح" ، "نص": "ركوب الدراجات"} ، {" } ، {"تم التحقق منه": خطأ ، "أطفال": [] ، "معرف": "11" ، "الوالد": صحيح ، "ParentId": "2" ، "الحالة": "مفتوح" ، "نص": "التعلم"} ، {" ] ، "ID": "2" ، "Parent": True ، "ParentId": "0" ، "state": "Open" ، "Text": "النص": "العقد العلوي"}ما سبق هو المحتوى الكامل لطريقة Java لإنتاج بيانات JSON ببنية الأشجار بناءً على محتوى جدول قاعدة البيانات. آمل أن يتمكن الجميع من دعم wulin.com ~