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)很適合存儲到關(guān)系型數(shù)據(jù)庫中。
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é)點
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é)點
for (int i = 0; i < multiTreeNodes.size(); i++) {
MultiTreeNode multiTreeNode = multiTreeNodes.get(i);
setChildren(multiTreeNode);
}
return multiTreeNodes;
}
/**
* 設(shè)置子節(jié)點
* @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é)點
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é)點
for (int i = 0; i < multiTreeNodes.size(); i++) {
MultiTreeNode multiTreeNode = multiTreeNodes.get(i);
getChildren(multiTreeNode);
}
return singleTreeNodes;
}
/**
* 獲取子節(jié)點
* @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);
}
}
}
}
}
}
測試
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, "中國");
SINGLE_TREE.add(China);
SingleTreeNode Hunan = new SingleTreeNode(2, 1, "湖南");
SINGLE_TREE.add(Hunan);
SingleTreeNode Changsha = new SingleTreeNode(3, 2, "長沙");
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, "美國");
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=中國, children=[MultiTreeNode [id=2, name=湖南, children=[MultiTreeNode [id=3, name=長沙, children=null]]], MultiTreeNode [id=4, name=湖北, children=[MultiTreeNode [id=5, name=武漢, children=null]]]]], MultiTreeNode [id=6, name=美國, children=[MultiTreeNode [id=7, name=加利福尼亞, children=[MultiTreeNode [id=8, name=洛杉磯, children=null]]]]]] [SingleTreeNode [id=1, pId=0, name=中國], SingleTreeNode [id=6, pId=0, name=美國], SingleTreeNode [id=2, pId=1, name=湖南], SingleTreeNode [id=3, pId=2, name=長沙], 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)換代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Java實現(xiàn)生成Excel樹形表頭完整代碼示例
Java語言描述二叉樹的深度和寬度
java算法實現(xiàn)紅黑樹完整代碼示例
如有不足之處,歡迎留言指出!
上一篇:Java編程實現(xiàn)對十六進(jìn)制字符串異或運(yùn)算代碼示例
欄 目:Java編程
本文標(biāo)題:java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼
本文地址:http://www.jygsgssxh.com/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)行時多態(tài)性的實現(xiàn)
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)器
- 01-10Java中的浮點數(shù)分析
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型


閱讀排行
本欄相關(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)行時多態(tài)性的實現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改


