有没有牛一点的树形查询

文章展示了两种方法来处理数据库查询并构建树形菜单结构。第一种是使用递归调用,每次查找子菜单时都从数据库查询。第二种是先获取所有菜单,然后通过流和过滤操作构建子菜单列表。两种方法都涉及到数据的层级嵌套和转换。
摘要由CSDN通过智能技术生成

要么,这种,反复查数据库

public void test(){
        System.out.println(JSON.toJSONString(findMenu(0)));
    }
    public List<Menu> findMenu(int x){
        LambdaQueryWrapper<Menu> lqw = new LambdaQueryWrapper<>();
        //查询条件
        lqw.eq(Menu::getParentId, x);
        List<Menu> list = menuService.list(lqw);
        for (Menu menu : list) {
            //递归子类数据
            menu.setChildrenList(findMenu(menu.getId()));
        }
        return list;
    }

要么就是,每次递归调用,都要传递整个查询数据。

@Test
    public void TreeDemo(){
            List<Menu> allList = menuService.list();
            List<Menu> collect = allList.stream()
                    .filter(item -> item.getParentId() == 0)
                    .map(item -> {
                        item.setChildrenList(getChildren(item.getId(), allList));
                        return item;
                    }).
                    collect(Collectors.toList());
            System.out.println(new Gson().toJsonTree(collect));
    }
    public List<Menu> getChildren(int id, List<Menu> allList) {
        List<Menu> collect = allList.stream()
                .filter(item -> item.getParentId().equals(id))
                .map(item -> {
                    item.setChildrenList(getChildren(item.getId(), allList));
                    return item;
                })
                .collect(Collectors.toList());
        return collect;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值