首页 > 开发 > 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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表