java编程两种树形菜单结构的转换代码
首先看看两种树形菜单结构的代码示例。
SingleTreeNode:
packagecom.zzj.tree; publicclassSingleTreeNode{ privateintid; privateintpId; privateStringname; publicSingleTreeNode(){ } publicSingleTreeNode(intid,intpId,Stringname){ this.id=id; this.pId=pId; this.name=name; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicintgetpId(){ returnpId; } publicvoidsetpId(intpId){ this.pId=pId; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } @Override publicStringtoString(){ return"SingleTreeNode[id="+id+",pId="+pId+",name="+name+"]"; } }
这种结构很适合存储到关系型数据库中。
MultiTreeNode:
packagecom.zzj.tree; importjava.util.List; publicclassMultiTreeNode{ privateintid; privateStringname; privateListchildren; publicMultiTreeNode(){ } publicMultiTreeNode(intid,Stringname){ this.id=id; this.name=name; } publicMultiTreeNode(intid,Stringname,List children){ this.id=id; this.name=name; this.children=children; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicList getChildren(){ returnchildren; } publicvoidsetChildren(List children){ this.children=children; } @Override publicStringtoString(){ return"MultiTreeNode[id="+id+",name="+name+",children="+children+"]"; } }
两种转换器
ToMultiTreeTransformer:
packagecom.zzj.tree; importjava.util.ArrayList; importjava.util.List; publicclassToMultiTreeTransformer{ privateListsingleTreeNodes; privateList multiTreeNodes=newArrayList<>(); publicToMultiTreeTransformer(List singleTreeNodes){ this.singleTreeNodes=singleTreeNodes; } publicList transform(){ //先找出所有的根节点 for(inti=0;i children=multiTreeNode.getChildren(); if(children==null){ children=newArrayList<>(); multiTreeNode.setChildren(children); } children.add(child); setChildren(child); } } } }
ToSingleTreeTransformer:
packagecom.zzj.tree; importjava.util.ArrayList; importjava.util.List; publicclassToSingleTreeTransformer{ privateListmultiTreeNodes; privateList singleTreeNodes=newArrayList<>(); publicToSingleTreeTransformer(List multiTreeNodes){ this.multiTreeNodes=multiTreeNodes; } publicList transform(){ //先获取根节点 for(inti=0;i children=multiTreeNode.getChildren(); if(children!=null){ for(intj=0;j 测试
packagecom.zzj.tree; importjava.util.ArrayList; importjava.util.List; publicclassTreeTransformerTest{ privatefinalstaticListSINGLE_TREE=newArrayList (); static{ SingleTreeNodeChina=newSingleTreeNode(1,0,"中国"); SINGLE_TREE.add(China); SingleTreeNodeHunan=newSingleTreeNode(2,1,"湖南"); SINGLE_TREE.add(Hunan); SingleTreeNodeChangsha=newSingleTreeNode(3,2,"长沙"); SINGLE_TREE.add(Changsha); SingleTreeNodeHubei=newSingleTreeNode(4,1,"湖北"); SINGLE_TREE.add(Hubei); SingleTreeNodeWuhan=newSingleTreeNode(5,4,"武汉"); SINGLE_TREE.add(Wuhan); SingleTreeNodeAmerica=newSingleTreeNode(6,0,"美国"); SINGLE_TREE.add(America); SingleTreeNodeCalifornia=newSingleTreeNode(7,6,"加利福尼亚"); SINGLE_TREE.add(California); SingleTreeNodeLosAngeles=newSingleTreeNode(8,7,"洛杉矶"); SINGLE_TREE.add(LosAngeles); } publicstaticvoidmain(String[]args)throwsException{ ToMultiTreeTransformermultiTreeTransformer=newToMultiTreeTransformer(SINGLE_TREE); List multiTreeNodes=multiTreeTransformer.transform(); System.out.println(multiTreeNodes); ToSingleTreeTransformersingleTreeTransformer=newToSingleTreeTransformer(multiTreeNodes); List 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算法实现红黑树完整代码示例
如有不足之处,欢迎留言指出!