温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java编程两种树形菜单结构的转换代码

发布时间:2020-08-23 02:57:47 来源:脚本之家 阅读:263 作者:zhangzeyuaaa 栏目:编程语言

首先看看两种树形菜单结构的代码示例。

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

这种结构很适合存储到关系型数据库中。

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实现生成Excel树形表头完整代码示例

Java语言描述二叉树的深度和宽度

java算法实现红黑树完整代码示例

如有不足之处,欢迎留言指出!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI