当前位置: 移动技术网 > IT编程>开发语言>Java > java递归展示树形图代码实现以及遇到的问题

java递归展示树形图代码实现以及遇到的问题

2019年05月16日  | 移动技术网IT编程  | 我要评论

河北河间市,命运不是辘轳伴奏,苏珊米勒2014年8月运势完整版

我最近写到了一个项目中用到了树形图,不得不说这个树形图是真的扯淡;

我用到的是layui中的树形图,再展示数据过程中遇到了很多的问题,废话不多说,直接贴代码。

一、调用排序接口,对数据进行排序。

二、生成树结构

public static list<treevo> findtree(list<wfunit> allmenu){  //这里treevo是我写了一个跟layui树形图结构一样结构的实体类,wfunit是我数据库表的实体类。

//查询所有菜单
//根节点
try {
list<treevo> tree = new arraylist<>();
for (wfunit nav : allmenu) {
system.out.println(nav.getownerunitid());
if (nav.getownerunitid().equals("0")) {//父节点是0的,为根节点,这里getownerunitid是我关联id自连接。
treevo t = new treevo();
t.setid(nav.getunitid());
t.setname(nav.getunitname());
t.setlevel(nav.getunitlevel());
t.setownerunitid(nav.getownerunitid());
t.setsequence(nav.getunitsequence());
tree.add(t);
}
}
/* 根据实体类的树等级排序 */
collections.sort(tree, level());
//为根菜单设置子菜单,getclild是递归调用的
for (treevo nav : tree) {
/* 获取根节点下的所有子节点 使用getchild方法*/
list<treevo> childlist = getchild(nav.getid(), allmenu);
system.out.println(childlist);
nav.setchildren(childlist);//给根节点设置子节点
}
return tree;
} catch (exception e) {
return null;
}
}


三、遍历子树
/**
* 获取子节点
* @param id 父节点id
* @param allmenu 所有菜单列表
* @return 每个根节点下,所有子菜单列表
*/
public static list<treevo> getchild(string id,list<wfunit> allmenu){
if(allmenu.size() == 0){ //这里用来结束循环,一开始我用的for循环,发现会进入死循环,然后换成了迭代器。
return null;
}
//子菜单
list<treevo> childlist = new arraylist<treevo>();
iterator<wfunit> it = allmenu.iterator();
while(it.hasnext()){
wfunit s = it.next();
if(s.getownerunitid().equals(id)){
//1.迭代就是迭代,不要对集合进行修改
childlist.add(new treevo(s.getunitid(),s.getunitname(),s.getunitlevel(),s.getownerunitid(),s.getunitsequence()));
it.remove();
}
}
listiterator<treevo> listit = childlist.listiterator();
system.out.println(childlist);
while(listit.hasnext()){
treevo s = listit.next();
s.setchildren(getchild(s.getid(), allmenu));
collections.sort(childlist,level());//排序
//如果节点下没有子节点,返回一个空list(递归退出)
if(childlist.size() == 0){
return new arraylist<treevo>();
}
system.out.println(s);
}
system.out.println(childlist);
return childlist;
}
最后给大家总结一下,这个排序有个问题,就是你的根节点不能只有一个数据,你们可以加个if判断试一下看行不行。
只有一个数据的话排序会抛异常,因为赶需求我也没更仔细的看。还有就是你的排序字段给的值千万别重复!!!
如果你的问题还是解决不了,可以私聊我。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网