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 = 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算法实现红黑树完整代码示例
如有不足之处,欢迎留言指出!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。