java递归查询菜单树


    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> getMenuTreeList(List<Menu> menuList,int pid) {
        // 查找所有菜单
        List<Menu> childrenList = new ArrayList<>();
                menuList.stream()
                .filter(d -> Objects.equals(pid, d.getMenuPid()))
                .collect(Collectors.toList())
                .forEach(d -> {
                    if(d.getMenuLeafNode().equals("0"))
                        d.setChild(getMenuTreeList(menuList,d.getMenuId()));
                    childrenList.add(d);
                });
        return childrenList;
    }


   


    /**
     * 递归取出所有关系树
     * @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=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);

猜你喜欢

转载自blog.csdn.net/thl331860203/article/details/83073592