首页 / JAVA / java实现多级递归
java实现多级递归
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java实现多级递归,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3335字,纯文字阅读大概需要5分钟。
内容图文
实体类 ?public
class
Menu {
??
// 菜单id
??
private
String id;
??
// 菜单名称
??
private
String name;
??
// 父菜单id
??
private
String parentId;
??
// 菜单url
??
private
String url;
??
// 菜单图标
??
private
String icon;
??
// 菜单顺序
??
private
int
order;
??
// 子菜单
??
private
List<Menu> children;
??
// ... 省去getter和setter方法以及toString方法
}
?
?
/*
??
* 排序,根据order排序
??
*/
?
public
Comparator<Menu> order(){
???
Comparator<Menu> comparator =
new
Comparator<Menu>() {
?????
@Override
?????
public
int
compare(Menu o1, Menu o2) {
???????
if
(o1.getOrder() != o2.getOrder()){
?????????
return
o1.getOrder() - o2.getOrder();
???????
}
???????
return
0
;
?????
}
???
};
???
return
comparator;
?
}
?
?
3.生成树的方法
public
Map<String,Object> findTree(){
??
Map<String,Object> data =
new
HashMap<String,Object>();
????
try
{
//查询所有菜单
??????
List<Menu> allMenu = menuDao.findTree();
??????
//根节点
??????
List<Menu> rootMenu =
new
ArrayList<Menu>();
??????
for
(Menu nav : allMenu) {
????????
if
(nav.getParentId().equals(
"0"
)){
//父节点是0的,为根节点。
??????????
rootMenu.add(nav);
????????
}
??????
}
??????
/* 根据Menu类的order排序 */
??????
Collections.sort(rootMenu, order());
??????
//为根菜单设置子菜单,getClild是递归调用的
??????
for (Menu nav : rootMenu) {
????????
/* 获取根节点下的所有子节点 使用getChild方法*/
????????
List<Menu> childList = getChild(nav.getId(), allMenu);
????????
nav.setChildren(childList);//给根节点设置子节点
??????
}
??????
/**
???????
* 输出构建好的菜单数据。
???????
*
???????
*/
??????
data.put(
"success"
,
"true"
);
??????
data.put(
"list"
, rootMenu);
??????
return
data;
????
}
catch
(Exception e) {
??????
data.put(
"success"
,
"false"
);
??????
data.put(
"list"
,
new
ArrayList());
??????
return
data;
????
}
??
}
?
?
4.获取子菜单
/**
???
* 获取子节点
???
* @param id 父节点id
???
* @param allMenu 所有菜单列表
???
* @return 每个根节点下,所有子菜单列表
???
*/
??
public
List<Menu> getChild(String id,List<Menu> allMenu){
????
//子菜单
????
List<Menu> childList =
new
ArrayList<Menu>();
????
for
(Menu nav : allMenu) {
??????
// 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
??????
//相等说明:为该根节点的子节点。
??????
if
(nav.ParentId().equals(id)){
????????
childList.add(nav);
??????
}
????
}
????
//递归
????
for
(Menu nav : childList) {
??????
nav.setChildren(getChild(nav.getId(), allMenu));
????
}
????
Collections.sort(childList,order());
//排序
????
//如果节点下没有子节点,返回一个空List(递归退出)
????
if
(childList.size() ==
0
){
??????
return
new
ArrayList<Menu>();
????
}
????
return
childList;
??
}
5.最终返回的json 字符串
{
?
"success"
:
"true"
,
?
"list"
: [
???
{
????
"id"
:
"1"
,
????
"name"
:
"Java"
,
????
"parentid"
:
"0"
,
????
"url"
:
"http://www.aliouchen.com"
,
????
"order"
:
1
,
????
"children"
: [
?????
{
???????
"id"
:
"2"
,
???????
"name"
:
"并发编程"
,
???????
"parentid"
:
"1"
,
???????
"url"
:
"http://www.aliouchen.com"
,
???????
"order"
:
1
,
???????
"children"
: []
?????
},
?????
{
???????
"id"
:
"3"
,
???????
"name"
:
"多线程"
,
???????
"parentid"
:
"1"
,
???????
"url"
:
"http://www.aliouchen.com"
,
???????
"order"
:
2
,
???????
"children"
: [
?????????
"id"
:
"4"
,
?????????
"name"
:
"Thread"
,
?????????
"parentid"
:
"3"
,
?????????
"url"
:
"http://www.aliouchen.com"
,
?????????
"order"
:
1
,
"children"
:[]
???????
]
?????
}
????
]
???
},
???
{
????
"id"
:
"5"
,
????
"name"
:
"Python"
,
????
"parentid"
:
"0"
,
????
"url"
:
"http://www.aliouchen.com"
,
????
"order"
:
2
,
????
"children"
: []
???
}
??
]
}
?
?
?
?
?
?
内容总结
以上是互联网集市为您收集整理的java实现多级递归全部内容,希望文章能够帮你解决java实现多级递归所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。