public void test(){
// 查询所有数据
List<SysMenu> sysMenus = sysMenuMapper.selectList(null);
// 在这里过滤根节点 也就是parentId为0的,0是最高节点(父节点)
List<SysMenu> collect = sysMenus.stream().filter(sysMenu -> sysMenu.getParentId().equals(0L))
.map(sysMenu -> {
// 在这里进行递归,将所有数据跟当前parentId为0的对象Id进行比较找到自己的子节点
sysMenu.setChildrenList(getChildrenData(sysMenus,sysMenu));
return sysMenu;
}).toList();
}
List<SysMenu> getChildrenData(List<SysMenu> sysMenuList,SysMenu sysMenu){
// 通过拥有所有数据的集合的 parentId 和 传入对象的Id进行匹配
// 假设现在 现在对象是 SysMenu{(parentId:0,id:1)}
// 那么现在查找的就是 parentId 为 1的数据
// 查出来parentId为1的数据有 三个
// list=[用户管理、菜单管理、部门管理]
List<SysMenu> list = sysMenuList.stream().filter(s -> s.getParentId().equals(sysMenu.getId()))
.map(sysMenu1 -> {
// 再去比较,拿自己的子集
sysMenu1.setChildrenList(getChildrenData(sysMenuList, sysMenu1));
return sysMenu1;
})
.toList();
return list;
}
java层级分类stream流递归写法
最新推荐文章于 2024-07-04 16:55:48 发布
该篇文章介绍了如何使用Java编程,通过数据库操作查询SysMenu表中的数据,特别是处理菜单的层级关系,通过递归方法获取所有子节点,以便展示一个完整的菜单树结构。
摘要由CSDN通过智能技术生成