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算法实现红黑树完整代码示例 如有不足之处,欢迎留言指出! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
