学无先后,达者为师

网站首页 java综合 正文

Java之使用递归查询多级树形结构数据(多级菜单),包括查询父级菜单

作者:小徐敲java 更新时间: 2024-04-06 java综合

1:方法一:通过pid查询出全部pid下的菜单信息,包括父菜单

@GetMapping("/menu")
    @ApiOperation(value = "树形查询", notes = "树形查询")
    public Result<?> findMenu(@RequestParam String pid) {
        List<DocCategoryManageVo> list = findMenu2(pid);
        List<String> strings = new ArrayList<>();
        List<String> menu2 = findMenu3(strings,list);
        return Result.OK(list);
    }
    
    public List<String> findMenu3(List<String> strings,List<DocCategoryManageVo> list) {
        for (DocCategoryManageVo docCategoryManageVo : list) {
            strings.add(docCategoryManageVo.getId());
            if (docCategoryManageVo.getChildMenu().size() > 0) {
                    findMenu3(strings,docCategoryManageVo.getChildMenu());
            }
        }
        return strings;
    }

	public List<DocCategoryManageVo> findMenu2(String pid) {
        List<DocCategoryManageVo> listVo = new ArrayList<>();
        QueryWrapper queryWrapper = new QueryWrapper<>();
        //查询条件
        queryWrapper.eq("pid", pid);
        List<DocCategoryManage> list = docCategoryManageService.list(queryWrapper);
        for (DocCategoryManage doc : list) {
            DocCategoryManageVo docVo = new DocCategoryManageVo();
            // 赋值
            BeanUtils.copyProperties(doc, docVo);
            docVo.setTitle(doc.getName());
            docVo.setKey(doc.getId());
            docVo.setValue(doc.getId());
//			 docVo.setChildren(new JSONArray());
            //递归子类数据
            docVo.setChildMenu(findMenu2(doc.getId()));
            listVo.add(docVo);

        }
        return listVo;
    }

2:方法二:通过pid查询出全部pid下的菜单信息,包括父菜单

/**
     * 递归获取子节点ID
     * @param pid
     * @param ids
     */
    void pidLoop(String pid, List<String> ids) {
        // 记录ID编码
        ids.add(pid);
        List<DocCategoryManage> listByPid = getListByPid(pid);
        if(CollectionUtils.isEmpty(listByPid)) {
            return;
        } else {
            for(DocCategoryManage doc : listByPid) {
                pidLoop(doc.getId(), ids);
            }
        }
    }

3:通过pid查询pid下的全部子菜单,不包括父菜单

@GetMapping("/menu")
    @ApiOperation(value = "树形查询", notes = "树形查询")
    public Result<?> findMenu(@RequestParam String pid) {
        List<DocCategoryManageVo> list = findMenu2(pid);
        List<String> flatten = flatten(list);
        return Result.OK(list);
    }


	public List<String> flatten(List<DocCategoryManageVo> list) {
        System.out.println("=======");
        return list.stream()
                .flatMap(d -> d.getChildMenu().size() > 0 ? flatten(d.getChildMenu()).stream() : Stream.of(d.getId()))
                .collect(Collectors.toList());
    }

	
	public List<DocCategoryManageVo> findMenu2(String pid) {
        List<DocCategoryManageVo> listVo = new ArrayList<>();
        QueryWrapper queryWrapper = new QueryWrapper<>();
        //查询条件
        queryWrapper.eq("pid", pid);
        List<DocCategoryManage> list = docCategoryManageService.list(queryWrapper);
        for (DocCategoryManage doc : list) {
            DocCategoryManageVo docVo = new DocCategoryManageVo();
            // 赋值
            BeanUtils.copyProperties(doc, docVo);
            docVo.setTitle(doc.getName());
            docVo.setKey(doc.getId());
            docVo.setValue(doc.getId());
//			 docVo.setChildren(new JSONArray());
            //递归子类数据
            docVo.setChildMenu(findMenu2(doc.getId()));
            listVo.add(docVo);

        }
        return listVo;
    }
    

原文链接:https://blog.csdn.net/qq_19891197/article/details/130207092

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新