日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新