【解决思路20211201】关于利用stream流和递归解决无限层级菜单的方式(基于mybatisplus+springboot)

ps 别照抄

1.创建数据库
id int 11 主键
pid int 11 跟随id(跟随上一级)
main string 11 一级餐单的名字
root string 11 二级或者N级餐单的名字
deleted int 1

主要风格大概类似 其余根据自己业务解决

2.创建pojo层,dao层,service层,controller层
直接使用mp生成器生成实体类,但是要修改pojo层 在最后加上 private List list; (T根据自己的pojo类修改)

3.在控制层利用stream流方式解决


public BaseResponse showAll(@RequestParam(required = false) String paramData) {
        QueryWrapper<T> queryWrapper = MybatisPlusQuery.parseWhereSql(paramData);
        List<T> mainmenu = targetService.list(queryWrapper);

        List<T> collect = mainmenu.stream().filter(m -> m.getPid() == 0).map(
                (m) -> {
                //这里的setlist对应批pojo层的 private List<T> list中的list,根据自己修改的修改
                    m.setlist(getChildrens(m, mainmenu));
                    return m;
                }
        ).collect(Collectors.toList());
        return BaseResponse.success(collect);
    }
    public List<T> getChildrens(T root , List<T> all){
        List<T> children = all.stream().filter(m -> {
            return Objects.equals(m.getPid(),root.getId());
        }).map(
                (m) -> {
                    m.setlist(getChildrens(m,all));
                    return m;
                }
        ).collect(Collectors.toList());
        return children;
    }

4.实现效果类似
在这里插入图片描述
就这样 自己测试完毕

总结 别照抄 稍微修改修改 我也是这里找到 虽然代码含义看不懂就是了 但能解决就好东西

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现多级菜单可以使用树形结构,可以通过递归实现。以下是一个简单的Java实现多级菜单的示例: 首先定义一个菜单实体类,包含菜单id、父级菜单id、菜单名称、菜单url等属性。 ```java public class Menu { private Long id; private Long parentId; private String name; private String url; // 省略getter和setter方法 } ``` 接着,在菜单服务类中定义一个方法,用于获取所有菜单项,然后递归构建树形结构。 ```java @Service public class MenuService { @Autowired private MenuMapper menuMapper; public List<Menu> getMenuList() { List<Menu> menuList = menuMapper.selectAll(); List<Menu> result = new ArrayList<>(); // 找出所有的根菜单 for (Menu menu : menuList) { if (menu.getParentId() == null) { result.add(menu); } } // 构建树形结构 for (Menu menu : result) { menu.setChildren(getChildren(menu, menuList)); } return result; } private List<Menu> getChildren(Menu parent, List<Menu> menuList) { List<Menu> children = new ArrayList<>(); for (Menu menu : menuList) { if (parent.getId().equals(menu.getParentId())) { children.add(menu); menu.setChildren(getChildren(menu, menuList)); } } return children; } } ``` 在Controller中调用菜单服务类的getMenuList方法,然后将结果返回给前端即可。 ```java @RestController @RequestMapping("/menu") public class MenuController { @Autowired private MenuService menuService; @GetMapping("/list") public List<Menu> getMenuList() { return menuService.getMenuList(); } } ``` 以上代码实现了基于Springboot+Mybatis多级菜单,前端可以通过递归遍历树形结构来构建菜单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值