递归构建树菜单节点

打印 上一主题 下一主题

主题 1851|帖子 1851|积分 5557

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、获取全部分类上下级信息

  1. /**
  2. * 获取所有分类上下级信息
  3. */
  4. public R<List<ResearchTypeTreeVO>> getTypeTreeList(){
  5.     //获取所有分类数据
  6.     List<ResearchTypeVO> list = ibResearchTypeService.getSuperList(null);
  7.     List<ResearchTypeTreeVO> researchTypeTreeVOList = null;
  8.     if(CollectionUtil.isNotEmpty(list)){
  9.         researchTypeTreeVOList = buildMenuTrees(list);
  10.     }
  11.     return R.data(researchTypeTreeVOList);
  12. }
复制代码
二、构建数据

  1. public static List<ResearchTypeTreeVO> buildMenuTrees(List<ResearchTypeVO> list) {
  2.     if(CollectionUtils.isEmpty(list)){
  3.         return new ArrayList<>();
  4.     }
  5.     Map<Long, ResearchTypeVO> researchTypeVOMap = list.stream().collect((Collectors.toMap(ResearchTypeVO::getId, item -> item, (o, n) -> o)));
  6.     //上级数据
  7.     List<ResearchTypeTreeVO> parentList = new ArrayList<>();
  8.     List<ResearchTypeTreeVO> childList = new ArrayList<>();
  9.     for (ResearchTypeVO vo : list) {
  10.         long parentId = vo.getSuperId();
  11.         ResearchTypeTreeVO option = new ResearchTypeTreeVO();
  12.         option.setId(vo.getId());
  13.         option.setSuperId(parentId);
  14.         option.setSuperName(vo.getSuperName());
  15.         option.setLabel(vo.getTypeName());
  16.         option.setValue(vo.getTypeCode());
  17.         // 尝试查找父菜单项,如果不存在则dictBiz是顶级菜单项
  18.         ResearchTypeVO researchTypeVO = researchTypeVOMap.get(parentId);
  19.         if(Objects.isNull(researchTypeVO)){
  20.             parentList.add(option);
  21.         }else {
  22.             childList.add(option);
  23.         }
  24.     }
  25.     //对查询出来的菜单进行整理 整理为树状
  26.     sortMenu(parentList, childList);
  27.     return parentList;
  28. }
复制代码
三、递归

  1. private static void sortMenu(List<ResearchTypeTreeVO> parentList, List<ResearchTypeTreeVO> childMenus) {
  2.     for (ResearchTypeTreeVO parent : parentList) {
  3.         List<ResearchTypeTreeVO> children = childMenus.stream()
  4.                 .filter(child -> child.getSuperId().equals(parent.getId()) )
  5.                 .collect(Collectors.toList());
  6.         // 设置父节点的子节点列表
  7.         parent.setChildren(children);
  8.         // 如果子节点列表不为空,则递归地对子节点进行排序
  9.         if (!children.isEmpty()) {
  10.             sortMenu(children, childMenus);
  11.         }
  12.     }
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表