java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼
首先看看兩種樹形菜單結(jié)構(gòu)的代碼示例。
SingleTreeNode:
package com.zzj.tree; public class SingleTreeNode { private int id; private int pId; private String name; public SingleTreeNode() { } public SingleTreeNode(int id, int pId, String name) { this.id = id; this.pId = pId; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getpId() { return pId; } public void setpId(int pId) { this.pId = pId; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "SingleTreeNode [id=" + id + ", pId=" + pId + ", name=" + name + "]"; } }
這種結(jié)構(gòu)很適合存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中。
MultiTreeNode:
package com.zzj.tree; import java.util.List; public class MultiTreeNode { private int id; private String name; private List<MultiTreeNode> children; public MultiTreeNode() { } public MultiTreeNode(int id, String name) { this.id = id; this.name = name; } public MultiTreeNode(int id, String name, List<MultiTreeNode> children) { this.id = id; this.name = name; this.children = children; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<MultiTreeNode> getChildren() { return children; } public void setChildren(List<MultiTreeNode> children) { this.children = children; } @Override public String toString() { return "MultiTreeNode [id=" + id + ", name=" + name + ", children=" + children + "]"; } }
兩種轉(zhuǎn)換器
ToMultiTreeTransformer:
package com.zzj.tree; import java.util.ArrayList; import java.util.List; public class ToMultiTreeTransformer { private List<SingleTreeNode> singleTreeNodes; private List<MultiTreeNode> multiTreeNodes = new ArrayList<>(); public ToMultiTreeTransformer(List<SingleTreeNode> singleTreeNodes) { this.singleTreeNodes = singleTreeNodes; } public List<MultiTreeNode> transform(){ // 先找出所有的根節(jié)點(diǎn) for (int i = 0; i < singleTreeNodes.size(); i++) { SingleTreeNode singleTreeNode = singleTreeNodes.get(i); Boolean isRoot = true; for (int j = 0; j < singleTreeNodes.size(); j++) { SingleTreeNode temp = singleTreeNodes.get(j); if (singleTreeNode.getpId() == temp.getId()) { isRoot = false; break; } } if (isRoot) { MultiTreeNode multiTreeNode = new MultiTreeNode(singleTreeNode.getId(), singleTreeNode.getName()); multiTreeNodes.add(multiTreeNode); } } // 設(shè)置子節(jié)點(diǎn) for (int i = 0; i < multiTreeNodes.size(); i++) { MultiTreeNode multiTreeNode = multiTreeNodes.get(i); setChildren(multiTreeNode); } return multiTreeNodes; } /** * 設(shè)置子節(jié)點(diǎn) * @param multiTreeNode */ private void setChildren(MultiTreeNode multiTreeNode){ for (int j = 0; j < singleTreeNodes.size(); j++) { SingleTreeNode temp = singleTreeNodes.get(j); if (temp.getpId() == multiTreeNode.getId()) { MultiTreeNode child = new MultiTreeNode(temp.getId(), temp.getName()); List<MultiTreeNode> children = multiTreeNode.getChildren(); if (children == null) { children = new ArrayList<>(); multiTreeNode.setChildren(children); } children.add(child); setChildren(child); } } } }
ToSingleTreeTransformer:
package com.zzj.tree; import java.util.ArrayList; import java.util.List; public class ToSingleTreeTransformer { private List<MultiTreeNode> multiTreeNodes; private List<SingleTreeNode> singleTreeNodes = new ArrayList<>(); public ToSingleTreeTransformer(List<MultiTreeNode> multiTreeNodes) { this.multiTreeNodes = multiTreeNodes; } public List<SingleTreeNode> transform(){ // 先獲取根節(jié)點(diǎn) for (int i = 0; i < multiTreeNodes.size(); i++) { MultiTreeNode multiTreeNode = multiTreeNodes.get(i); SingleTreeNode singleTreeNode = new SingleTreeNode(multiTreeNode.getId(), 0, multiTreeNode.getName()); singleTreeNodes.add(singleTreeNode); } // 獲取子節(jié)點(diǎn) for (int i = 0; i < multiTreeNodes.size(); i++) { MultiTreeNode multiTreeNode = multiTreeNodes.get(i); getChildren(multiTreeNode); } return singleTreeNodes; } /** * 獲取子節(jié)點(diǎn) * @param multiTreeNode */ private void getChildren(MultiTreeNode multiTreeNode){ for (int i = 0; i < singleTreeNodes.size(); i++) { SingleTreeNode temp = singleTreeNodes.get(i); if (multiTreeNode.getId() == temp.getId()) { List<MultiTreeNode> children = multiTreeNode.getChildren(); if (children != null) { for (int j = 0; j < children.size(); j++) { MultiTreeNode child = children.get(j); SingleTreeNode singleTreeNode = new SingleTreeNode(child.getId(), multiTreeNode.getId(), child.getName()); singleTreeNodes.add(singleTreeNode); getChildren(child); } } } } } }
測(cè)試
package com.zzj.tree; import java.util.ArrayList; import java.util.List; public class TreeTransformerTest { private final static List<SingleTreeNode> SINGLE_TREE = new ArrayList<SingleTreeNode>(); static { SingleTreeNode China = new SingleTreeNode(1, 0, "中國(guó)"); SINGLE_TREE.add(China); SingleTreeNode Hunan = new SingleTreeNode(2, 1, "湖南"); SINGLE_TREE.add(Hunan); SingleTreeNode Changsha = new SingleTreeNode(3, 2, "長(zhǎng)沙"); SINGLE_TREE.add(Changsha); SingleTreeNode Hubei = new SingleTreeNode(4, 1, "湖北"); SINGLE_TREE.add(Hubei); SingleTreeNode Wuhan = new SingleTreeNode(5, 4, "武漢"); SINGLE_TREE.add(Wuhan); SingleTreeNode America = new SingleTreeNode(6, 0, "美國(guó)"); SINGLE_TREE.add(America); SingleTreeNode California = new SingleTreeNode(7, 6, "加利福尼亞"); SINGLE_TREE.add(California); SingleTreeNode LosAngeles = new SingleTreeNode(8, 7, "洛杉磯"); SINGLE_TREE.add(LosAngeles); } public static void main(String[] args) throws Exception { ToMultiTreeTransformer multiTreeTransformer = new ToMultiTreeTransformer(SINGLE_TREE); List<MultiTreeNode> multiTreeNodes = multiTreeTransformer.transform(); System.out.println(multiTreeNodes); ToSingleTreeTransformer singleTreeTransformer = new ToSingleTreeTransformer(multiTreeNodes); List<SingleTreeNode> singleTreeNodes = singleTreeTransformer.transform(); System.out.println(singleTreeNodes); } }
輸出結(jié)果:
[MultiTreeNode [id=1, name=中國(guó), children=[MultiTreeNode [id=2, name=湖南, children=[MultiTreeNode [id=3, name=長(zhǎng)沙, children=null]]], MultiTreeNode [id=4, name=湖北, children=[MultiTreeNode [id=5, name=武漢, children=null]]]]], MultiTreeNode [id=6, name=美國(guó), children=[MultiTreeNode [id=7, name=加利福尼亞, children=[MultiTreeNode [id=8, name=洛杉磯, children=null]]]]]] [SingleTreeNode [id=1, pId=0, name=中國(guó)], SingleTreeNode [id=6, pId=0, name=美國(guó)], SingleTreeNode [id=2, pId=1, name=湖南], SingleTreeNode [id=3, pId=2, name=長(zhǎng)沙], SingleTreeNode [id=4, pId=1, name=湖北], SingleTreeNode [id=5, pId=4, name=武漢], SingleTreeNode [id=7, pId=6, name=加利福尼亞], SingleTreeNode [id=8, pId=7, name=洛杉磯]]
總結(jié)
以上就是本文關(guān)于java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Java實(shí)現(xiàn)生成Excel樹形表頭完整代碼示例
Java語言描述二叉樹的深度和寬度
java算法實(shí)現(xiàn)紅黑樹完整代碼示例
如有不足之處,歡迎留言指出!
上一篇:Java編程實(shí)現(xiàn)對(duì)十六進(jìn)制字符串異或運(yùn)算代碼示例
欄 目:Java編程
下一篇:Java編程實(shí)現(xiàn)帕斯卡三角形代碼示例
本文標(biāo)題:java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼
本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8381.html
您可能感興趣的文章
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)器
- 01-10Java中的浮點(diǎn)數(shù)分析
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10J2SE 1.5版本的新特性一覽
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改