国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java編程兩種樹形菜單結構的轉換代碼

2024-07-13 10:14:18
字體:
來源:轉載
供稿:網友

首先看看兩種樹形菜單結構的代碼示例。

SingleTreeNode:

java;">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 + "]";	}}

這種結構很適合存儲到關系型數據庫中。

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 + "]";	}}

兩種轉換器

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(){		// 先找出所有的根節點 		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);			}		}		// 設置子節點 		for (int i = 0; i < multiTreeNodes.size(); i++) {			MultiTreeNode multiTreeNode = multiTreeNodes.get(i);			setChildren(multiTreeNode);		}		return multiTreeNodes;	}	/**    * 設置子節點    * @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(){		// 先獲取根節點 		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);		}		// 獲取子節點 		for (int i = 0; i < multiTreeNodes.size(); i++) {			MultiTreeNode multiTreeNode = multiTreeNodes.get(i);			getChildren(multiTreeNode);		}		return singleTreeNodes;	}	/**    * 獲取子節點    * @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);	}}

輸出結果:

[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=洛杉磯]] 

總結

以上就是本文關于java編程兩種樹形菜單結構的轉換代碼的全部內容,希望對大家有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙城区| 普洱| 涿州市| 五常市| 军事| 湾仔区| 临潭县| 泊头市| 仪陇县| 南宁市| 犍为县| 巨鹿县| 进贤县| 鄢陵县| 滦南县| 昌邑市| 德庆县| 堆龙德庆县| 建平县| 横山县| 陆良县| 平果县| 莱芜市| 巴青县| 云安县| 文水县| 荆门市| 丹东市| 镇安县| 白朗县| 烟台市| 永丰县| 泾源县| 东台市| 略阳县| 化德县| 富宁县| 沙坪坝区| 康马县| 大丰市| 浪卡子县|