java编程两种树形菜单结构的转换代码
发布时间:2020-12-14 20:50:52 所属栏目:Java 来源:网络整理
导读:首先看看两种树形菜单结构的代码示例。 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
首先看看两种树形菜单结构的代码示例。 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(),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,"中国"); 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,"湖北"); SINGLE_TREE.add(Hubei); SingleTreeNode Wuhan = new SingleTreeNode(5,4,"武汉"); SINGLE_TREE.add(Wuhan); SingleTreeNode America = new SingleTreeNode(6,"美国"); 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,name=美国],SingleTreeNode [id=2,pId=1,name=湖南],SingleTreeNode [id=3,pId=2,name=长沙],SingleTreeNode [id=4,name=湖北],SingleTreeNode [id=5,pId=4,name=武汉],SingleTreeNode [id=7,pId=6,name=加利福尼亚],SingleTreeNode [id=8,pId=7,name=洛杉矶]] 总结 以上就是本文关于java编程两种树形菜单结构的转换代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站: Java实现生成Excel树形表头完整代码示例 Java语言描述二叉树的深度和宽度 java算法实现红黑树完整代码示例 如有不足之处,欢迎留言指出! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |