首页 / JAVA / java递归查询菜单树
java递归查询菜单树
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java递归查询菜单树,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2484字,纯文字阅读大概需要4分钟。
内容图文
public class Menu {
private Integer menuId;//菜单主键自增ID
private Integer menuPid;//菜单父ID,0为根目录
private String menuLeafNode;//是否是叶子节点 1:是 0:否
private String menuName;//菜单名称
private String menuURL;//菜单URL
private String menuStatus;//菜单状态 1:有效 -1:无效
private Integer menuOrder;//菜单排序
@JsonInclude(JsonInclude.Include.NON_NULL) //忽略空值输出JSON
private List<Menu> child;//子菜单
get / set ...
}
/**
* 查询所有菜单树
* JDK1.8
*/
private List<Menu> getTreeList(List<Menu> menuList,int pid) {
// 查找所有子菜单
List<Menu> childrenList = menuList.stream()
.filter(d -> Objects.equals(pid, d.getMenuPid()))
.collect(Collectors.toList());
List<Menu> tempList = new ArrayList<>();
// 遍历所有子菜单
childrenList.forEach(d -> {
if(d.getMenuLeafNode().equals("0"))
d.setChild(getTreeList(menuList,d.getMenuId()));
tempList.add(d);
});
return tempList;
}
/**
* 递归取出所有关系树
* @param list
* @param pid
* @return
*/
private List<Menu> getMenuTree(List<Menu> list,int pid) {
List<Menu> menuList=new ArrayList<>();
//取出所有菜单
for (int i = 0;i< list.size();i++) {
Menu menu = list.get(i);
if (menu.getMenuPid() == pid ) {//取出所有父菜单
if(menu.getMenuLeafNode().equals("0")) {
menu.setChild(getMenuTree(list, menu.getMenuId()));
}
menuList.add(menu);
}
}
return menuList;
}
/**
* 取出所有关系树其它实现
* @param list
* @param parentID
* @return
*/
private List<Map<String,Object>> getMenuTreeList(List<Menu> list,int parentID) {
List<Map<String,Object>> menuList=new ArrayList<>();
Map<String, Object> map = new HashMap<>();
//取出所有菜单
for (int i = 0;i< list.size();i++) {
Menu menu = list.get(i);
if (menu.getMenuPid() == parentID ) {//取出所有父菜单
map=UtilTools.object2Map(menu);//返回菜单加入父对象
map.remove("createDate");
list.remove(menu);
if(menu.getMenuLeafNode().equals("0")) {
map.put("child", getMenuTreeList(list, menu.getMenuId()));
}else{
map.remove("child");
}
menuList.add(map);
}
}
return menuList;
}
/**
* 实体对象转成Map
* @param obj 实体对象
* @return
*/
public static Map<String, Object> object2Map(Object obj) {
Map<String, Object> map = new HashMap<>();
if (obj == null) {
return map;
}
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
调用 :
Map<String,Object> map = new HashMap<>();
List<Menu> list = menuDao.selectAll();
map.put("menuTree",getTreeList(list,0));
//map.put("menuTree",getMenuTree(list,0));
return toJson(map);
内容总结
以上是互联网集市为您收集整理的java递归查询菜单树全部内容,希望文章能够帮你解决java递归查询菜单树所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。