菜单树json格式

  {"metricsCategoryId": null,"metricsCategoryCode": null,"metricsCategoryName": "全部","parentMetricsCategoryCode": null,"metricsCount": 7,"children": [{"metricsCategoryId": 46,"metricsCategoryCode": "sukt8mz1","metricsCategoryName": "一级分类","parentMetricsCategoryCode": null,"metricsCount": 0,"children": [{"metricsCategoryId": 47,"metricsCategoryCode": "y6pt8mz1","metricsCategoryName": "二级分类","parentMetricsCategoryCode": "sukt8mz1","metricsCount": 0,"children": [{"metricsCategoryId": 48,"metricsCategoryCode": "pdku8mz1","metricsCategoryName": "三级分类","parentMetricsCategoryCode": "y6pt8mz1","metricsCount": 0,"children": [{"metricsCategoryId": 49,"metricsCategoryCode": "mequ8mz1","metricsCategoryName": "四级分类","parentMetricsCategoryCode": "pdku8mz1","metricsCount": 0,"children": []}]},{"metricsCategoryId": 52,"metricsCategoryCode": "atv8hmz1","metricsCategoryName": "三级分类2","parentMetricsCategoryCode": "y6pt8mz1","metricsCount": 0,"children": [{"metricsCategoryId": 53,"metricsCategoryCode": "i78ahmz1","metricsCategoryName": "四级分类2","parentMetricsCategoryCode": "atv8hmz1","metricsCount": 0,"children": []}]},{"metricsCategoryId": 57,"metricsCategoryCode": "i3dg0002","metricsCategoryName": "三级分类3","parentMetricsCategoryCode": "y6pt8mz1","metricsCount": 0,"children": []}]}]},{"metricsCategoryId": 54,"metricsCategoryCode": "ucemhmz1","metricsCategoryName": "一级分类2","parentMetricsCategoryCode": null,"metricsCount": 0,"children": [{"metricsCategoryId": 55,"metricsCategoryCode": "scqshmz1","metricsCategoryName": "二级分类2","parentMetricsCategoryCode": "ucemhmz1","metricsCount": 0,"children": []}]}]}

方法

public List<CategoryMetricsVO> getList(String metricsAlias) {// 获取全部菜单数据List<CdpMetricsCategory> list = this.list();// 转换成前端返回VO对象List<MetricsCategoryVO> categoryVoS = mapperFactory.getMapperFacade().mapAsList(list, MetricsCategoryVO.class);// 转为上方树型结构 buildCategoryTree()方法自己实现即可categoryVoS = buildCategoryTree(categoryVoS);
//        1、key:code,value:该code从父级到自己级别的nameList<Map<String, List<String>>> mapList = new ArrayList<>();for (MetricsCategoryVO metricsCategoryVO : categoryVoS) {Map<String, List<String>> mapTemp = new LinkedHashMap<>();List<String> nameLists = new ArrayList<>();Map<String, List<String>> categoryMetricsVOs = this.getCategoryMetricsVOs(metricsCategoryVO, mapTemp, nameLists);mapList.add(categoryMetricsVOs);}List<CategoryMetricsVO> metricsVOs = mapperFactory.getMapperFacade().mapAsList(list, CategoryMetricsVO.class);
//    2、遍历匹配,有序添加进集合List<CategoryMetricsVO> metricsVOList = new ArrayList<>(mapList.size());for (Map<String, List<String>> map : mapList) {map.forEach((key, value) -> {metricsVOs.forEach(m -> {if (StringUtils.equals(m.getMetricsCategoryCode(), key)) {m.setMetricsCategoryName(String.join("/", value));//                    3、根据Code查找其对应指标m.setModelMetricsVOS(this.queryAllByCodeAndTableType(m.getMetricsCategoryCode(), metricsAlias));metricsVOList.add(m);}});});}//        如果 metricsAlias 不为null,metricsAliasif (StringUtils.isNotBlank(metricsAlias)) {log.info("中文名字:{} 不为null,模糊查询返回", metricsAlias);return metricsVOList.stream().filter(s -> CollectionUtil.isNotEmpty(s.getModelMetricsVOS())).collect(Collectors.toList());}return metricsVOList;}/*** 向下递归查询顶级类型的各层级名称全称*/private Map<String, List<String>> getCategoryMetricsVOs(MetricsCategoryVO metricsCategoryVO, Map<String, List<String>> mapTemp, List<String> nameLists) {nameLists.add(metricsCategoryVO.getMetricsCategoryName());mapTemp.put(metricsCategoryVO.getMetricsCategoryCode(), nameLists);
//        必须新建一个,因为下方map中的value是存的nameLists的内存地址引用List<MetricsCategoryVO> children = metricsCategoryVO.getChildren();if (CollectionUtil.isNotEmpty(children)) {for (MetricsCategoryVO c : children) {List<String> strings = new ArrayList<>(nameLists);
//          去掉 mapTemp.put(c.getMetricsCategoryCode(), strings);放开 下面的 /*else{....}*/ 即可变为获取到最后一级mapTemp.put(c.getMetricsCategoryCode(), strings);getCategoryMetricsVOs(c, mapTemp, strings);}} /*else {List<String> newNameLists = new ArrayList<>(nameLists);mapTemp.put(metricsCategoryVO.getMetricsCategoryCode(), newNameLists);}*/return mapTemp;}

结果:
1、获取每级

{"data":[{"metricsCategoryCode":"sukt8mz1","metricsCategoryName":"一级分类","modelMetricsVOS":[]},{"metricsCategoryCode":"y6pt8mz1","metricsCategoryName":"一级分类/二级分类","modelMetricsVOS":[]},{"metricsCategoryCode":"pdku8mz1","metricsCategoryName":"一级分类/二级分类/三级分类","modelMetricsVOS":[]},{"metricsCategoryCode":"mequ8mz1","metricsCategoryName":"一级分类/二级分类/三级分类/四级分类","modelMetricsVOS":[]},{"metricsCategoryCode":"zkvu8mz1","metricsCategoryName":"一级分类/二级分类/三级分类/四级分类/五级分类","modelMetricsVOS":[]},{"metricsCategoryCode":"atv8hmz1","metricsCategoryName":"一级分类/二级分类/三级分类2","modelMetricsVOS":[]},{"metricsCategoryCode":"i78ahmz1","metricsCategoryName":"一级分类/二级分类/三级分类2/四级分类2","modelMetricsVOS":[]},{"metricsCategoryCode":"ucemhmz1","metricsCategoryName":"一级分类2","modelMetricsVOS":[]},{"metricsCategoryCode":"scqshmz1","metricsCategoryName":"一级分类2/二级分类2","modelMetricsVOS":[]}]
}

2、只获取每个层级最后一级

{"data": [{"metricsCategoryCode": "zkvu8mz1","metricsCategoryName": "一级分类/二级分类/三级分类/四级分类/五级分类","modelMetricsVOS": []},{"metricsCategoryCode": "i78ahmz1","metricsCategoryName": "一级分类/二级分类/三级分类2/四级分类2","modelMetricsVOS": []},{"metricsCategoryCode": "i3dg0002","metricsCategoryName": "一级分类/二级分类/三级分类3","modelMetricsVOS": []},{"metricsCategoryCode": "scqshmz1","metricsCategoryName": "一级分类2/二级分类2","modelMetricsVOS": []}]
}

Java多级菜单树转为面包屑相关推荐

  1. java多级菜单列表怎么做_JAVA构造多级菜单

    很多时候我们在前段展现时要用到多级菜单,刚好今天做了个简单的,整理一下: 首先我们要确定要展现的菜单结构: --根菜单 --一级菜单A --二级菜单A --三级菜单A --一级菜单B 与Hiberna ...

  2. 菜单转换Java_java递归菜单树转换成pojo对象

    package com.cjonline.foundation.authority.pojo; import java.util.ArrayList; import java.util.Collect ...

  3. java递归把list菜单列表转为菜单树

    java递归把列表转为菜单树 菜单实体类 package com.utils.menu;import java.util.List;public class Menu {private String ...

  4. 若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起

    前言 因为是在vue源码的基础上进行修改,所以,就没有复制代码在文章上,采取的是截图对比源码和我修改的代码片段.要麻烦你们自己手敲了. 先来看看效果: 场景:在费用配置列表中,点击每一项的配置,都会在 ...

  5. java 面包屑导航_基于SpringBoot打造在线教育系统(7)-- 面包屑导航与子分类

    这一节我们来讲一下面包屑导航的问题. 先看思路,当我们点击左侧的一级课程,是不是可以拿到一个ID? 这个ID的作用可大了,我们有了这个ID,本意是通过它去寻找它所有的子节点. 看图,假设[JAVA基础 ...

  6. java web动态菜单设计_spring-boot与模板引擎:使用metisMenu实现动态多级菜单

    系列传送门 在web开发中,特别是后台管理工具的开发,经常用到纵向的多级菜单. 但是常用的Bootstrap仅能支持到2级菜单,对于3级及3级以上的菜单的显示,却无能为力. 下面我将使用另一个jQue ...

  7. mysql vue 菜谱_vue+ java 实现多级菜单递归效果

    效果如图: 大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可.有两个需要关注的点: 1.官方事例的数据结构是一个对象里面包含着集合,而不是一 ...

  8. java中菜单分几级_JAVA构造多级菜单

    很多时候我们在前段展现时要用到多级菜单,刚好今天做了个简单的,整理一下: 首先我们要确定要展现的菜单结构: --根菜单 --一级菜单A --二级菜单A --三级菜单A --一级菜单B 与Hiberna ...

  9. php递归面包屑,php可应用于面包屑导航的递归寻找家谱树实现方法

    本文实例讲述了php可应用于面包屑导航的递归寻找家谱树实现方法.分享给大家供大家参考.具体实现方法如下:<?phpecho " ";$area = array(array(& ...

最新文章

  1. setsockopt()函数 参数详解
  2. feignRequest$Options错误
  3. HDU - 2438 Turn the corner(三分)
  4. Android OpenSL ES 对象结构
  5. 一文看懂WebTransport
  6. HDU:4185-Oil Skimming
  7. CSS: 深入理解BFC和Margin Collapse (margin叠加或者合并外边距)
  8. 是时候考虑让你的Spark跑在K8S上了
  9. ANSI C:+++
  10. 82c55单片机c语言,AT89S51单片机与82C55的接口设计编程
  11. CSS-背景 超链接
  12. 税控盘是服务器系统,税控盘系统设置服务器地址
  13. python stm32f401_使用Python编程STM32F401 Nucleo开发板快速入门
  14. vs2017 git 操作重置、还原、挑拣对比
  15. 内后视镜和外后视镜哪个显示真实距离?
  16. c语言编计分秒时的程序,用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。...
  17. 如何将Python打包后的exe还原成.py?
  18. 何一娜:诺基亚软件开发工程师典型的一天
  19. html 字体图标转换工具,字体转换器
  20. symbian与uiq开发教程[完整版]

热门文章

  1. ipset+iptables封禁以及自动解封IP
  2. 网络模型:HTTTP、TCP、UDP简介
  3. pcm 降采样_图像降采样和升采样
  4. 模拟与高精度——字符串的展开
  5. centos7下部署gitlab
  6. 一文读懂容器存储接口 CSI
  7. android最新面试题及答案,分享两道阿里P7究极难度算法题
  8. C语言初阶总结 v1
  9. 2008年互联网投资指南[转]
  10. python sklearn 画出决策树并保存为PDF