成绩菜单数据构造–stream中的GroupingBy

package com.chorany.codeAuto.modeData;import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;
import com.google.common.collect.Maps;import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;/*** @Author: chorany* @Date: 2022/1/7 23:31* @Description:* @Version:*/
public class ModelDataTest {private static final Map<String, ModelDataDO> MODEL_DATA = Maps.newConcurrentMap();public static void main(String[] args) {ModelDataDO data1 = new ModelDataDO();data1.setCode("henan");data1.setTitle("河南省");data1.setSupCode(null);data1.setIsParent("是");data1.setSubIndex("1");ModelDataDO data2 = new ModelDataDO();data2.setCode("xinyang");data2.setTitle("信阳市");data2.setSupCode("henan");data2.setIsParent("是");data2.setSubIndex("1");ModelDataDO data3 = new ModelDataDO();data3.setCode("zhengzhou");data3.setTitle("郑州市");data3.setSupCode("henan");data3.setIsParent("是");data3.setSubIndex("2");ModelDataDO data4 = new ModelDataDO();data4.setCode("huaibin");data4.setTitle("淮滨县");data4.setSupCode("xinyang");data4.setIsParent("是");data4.setSubIndex("1");ModelDataDO data5 = new ModelDataDO();data5.setCode("huangchuan");data5.setTitle("潢川县");data5.setSupCode("xinyang");data5.setIsParent("否");data5.setSubIndex("2");ModelDataDO data6 = new ModelDataDO();data6.setCode("guangshan");data6.setTitle("光山县");data6.setSupCode("xinyang");data6.setIsParent("否");data6.setSubIndex("3");ModelDataDO data7 = new ModelDataDO();data7.setCode("jinshui");data7.setTitle("金水区");data7.setSupCode("zhengzhou");data7.setIsParent("否");data7.setSubIndex("1");ModelDataDO data8 = new ModelDataDO();data8.setCode("gudui");data8.setTitle("谷堆县");data8.setSupCode("huaibin");data8.setIsParent("否");data8.setSubIndex("1");ArrayList<ModelDataDO> modelDataDOS = new ArrayList<>();modelDataDOS.add(data1);modelDataDOS.add(data2);modelDataDOS.add(data3);modelDataDOS.add(data4);modelDataDOS.add(data5);modelDataDOS.add(data6);modelDataDOS.add(data7);modelDataDOS.add(data8);//先判断缓存中有没有数据if (MODEL_DATA.containsKey("henan")) {System.out.println(new ArrayList<ModelDataDO>().add(MODEL_DATA.get("henan")));}//操作所有数据,按照sup_code分组//Map<String, List<ModelDataDO>> groupMap = modelDataDOS.stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getSupCode()).orElse(""))); 改key空值法Map<String, List<ModelDataDO>> groupMap = modelDataDOS.stream().filter(e->e.getSupCode()!=null).collect(Collectors.groupingBy(ModelDataDO::getSupCode)); //过滤key空值法System.out.println(JSONObject.toJSONString(groupMap));modelDataDOS.forEach(modelDataDO -> {List<ModelDataDO> modelDataDOChildrenList = groupMap.get(modelDataDO.getCode());if (!CollectionUtils.isEmpty(modelDataDOChildrenList)) {List<ModelDataDO> collect = modelDataDOChildrenList.stream().sorted(Comparator.comparing(ModelDataDO::getSubIndex).reversed()).collect(Collectors.toList());modelDataDO.setChildrenList(collect);}});//创建缓存数据//将每条数据以code为key封装到静态map中Map<String, ModelDataDO> collect1 = modelDataDOS.stream().collect(Collectors.toMap(ModelDataDO::getCode, Function.identity()));MODEL_DATA.putAll(collect1);//需要返回的完整数据为System.out.println(new ArrayList<ModelDataDO>().add(collect1.get("henan")));//List<ModelDataDO> collect = modelDataDOS.stream().filter(modelDataDO -> modelDataDO.getSupCode().equals("0")).collect(Collectors.toList());//System.out.println(JSONObject.toJSONString(collect));/* System.out.println("未进行处理过的数据"+ JSONObject.toJSONString(modelDataDOS));//按照code分组Map<String, ModelDataDO> collect1 = modelDataDOS.stream().collect(Collectors.toMap(ModelDataDO::getCode, Function.identity()));System.out.println("根据code封装map" + JSONObject.toJSONString(collect1));//操作所有数据,按照sup_code分组Map<String, List<ModelDataDO>> groupMap = modelDataDOS.stream().collect(Collectors.groupingBy(ModelDataDO::getSupCode));ArrayList<String> strings = new ArrayList<>();for (ModelDataDO modelDataDO : modelDataDOS) {strings.add(modelDataDO.getSupCode());}System.out.println("根据sup_code分组"+ JSONObject.toJSONString(groupMap));modelDataDOS.forEach(modelDataDO -> {List<ModelDataDO> modelDataDOChildrenList = groupMap.get(modelDataDO.getCode());if (!CollectionUtils.isEmpty(modelDataDOChildrenList)) {List<ModelDataDO> collect = modelDataDOChildrenList.stream().sorted(Comparator.comparing(ModelDataDO::getSubIndex).reversed()).collect(Collectors.toList());modelDataDO.setChildrenList(collect);}System.out.println("分好组的数据-->" + JSONObject.toJSONString(modelDataDOS));});//过滤筛选完整的数据ArrayList<ModelDataDO> modelDataDOS1 = new ArrayList<>();for (String string : strings) {List<ModelDataDO> collect = modelDataDOS.stream().filter(modelDataDO -> modelDataDO.getSupCode().equals(string)).collect(Collectors.toList());modelDataDOS1.add(collect.get(0));}System.out.println("最终的数据-->"+JSONObject.toJSONString(modelDataDOS1));*//**** 1、根据标志,找到第一级分支(第一级分支无sup_code=null)* 2、找到第一级后拿出数据 开始递归(递归题需要确认好)* 3、检测递归结果**//* ** Stream分组@Overridepublic List<Menu> selectMenuTree() {List<Menu> menus = menuMapper.selectList(null);//操作所有菜单数据Map<Long, List<Menu>> groupMap = menus.stream().collect(Collectors.groupingBy(Menu::getParentId));menus.forEach(menu -> {menu.setChildren(groupMap.get(menu.getMenuId()));});List<Menu> collect = menus.stream().filter(menu -> menu.getParentId().equals(0L)).collect(Collectors.toList());return collect;}*/}
}

package com.chorany.codeAuto.modeData;import lombok.Data;import java.util.List;/*** @Author: chorany* @Date: 2022/1/7 23:25* @Description:* @Version:*/
@Data
public class ModelDataDO {private String code;private String title;private String supCode;private String isParent;private String subIndex;private String first;private String second;private List<ModelDataDO> childrenList;
}

层级菜单构造--groupingby相关推荐

  1. vant树型菜单多级_无限层级菜单—左右值树型数据结构

    在上一篇博客中,我提到了后台菜单的问题.其实我不想写,因为比较久了,都差不多忘了,只记得当时理解得很痛苦. 下面这个菜单是一个多层级菜单的,在 计算机中心 菜单下,有6个子菜单,在子菜单 微信管理 下 ...

  2. 【Unity3D-UGUI应用篇】(三)使用UGUI实现层级菜单

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  3. 如何对android菜单,Android菜单构造技巧

    今天为大家介绍的Android菜单的创建方法主要是通过xml文件来实现的.我们将通过对相关编程代码的解读来充分了解这一应用技巧. 在Android手机操作系统中,可以用很多方法来实现一个相同的功能.这 ...

  4. php 多级分成手机版,PHP 层级菜单数组处理,由一级数组转换为多级数组的递归实现...

    function getDarray($data,$pid = 0){ $result = array(); foreach($data as $v){ if($v['parentid'] == $p ...

  5. 下拉框可筛选多层级菜单多选_用Excel做多级下拉菜单媲美网页筛选器

    用Excel进行数据收集,做好一个数据录入文件给用户使用,结果收回来的数据让你令人抓狂:手机号不是11位 面积单位有人写平方米,有人写m2 张冠李戴,明明写姓名的地方,写了性别 说好写保留一位小数,却 ...

  6. js中将有层级关系的一维数据转换为父子级关系的二维数据、菜单权限三级层级数据实现(树形结构数据)

    很久没有发文了,今天发点不一样的,如下: <script>// 一维数据:let arrData=[{ r_id: 1, role_name: '开发商', n_id: 1, txt: ' ...

  7. 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(Ngt;=4)种方法

    权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...

  8. [QT_015]Qt学习之基于条目控件的自定义特性(拖拽+右键菜单+样式)

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 本节介绍基于条目控件的定制特性,首先介绍条目的拖拽,列表控件. ...

  9. QT5实践:菜单窗口实现图像打开浏览、存盘

    一.从本代码中学到什么? 以下代码实现功能有: 1 菜单画出 2 菜单事件响应 3 文件对话框 4 显示图片 5 图片放大缩小 二. 实现代码 from PyQt5.QtCore import QDi ...

  10. QT5实践:如何应用窗口菜单

    1 生成步骤 窗口菜单生成步骤如下: 1)生成一个菜单列标题  self.fileMenu = QMenu("&File", self) 注意:只是生成列,但列标题有,内容 ...

最新文章

  1. Owncloud-X安装配置
  2. 腾讯发布AR导航,“生态+技术”驱动下一代智能座舱体验跃迁
  3. oracle backup arch,ORCLE RMAN备份脚本
  4. 分页类实例 java
  5. linux 双网卡绑定(bonding)实现负载均衡或故障转移
  6. 指针04 - 零基础入门学习C语言44
  7. HDnoip2017题解
  8. Flutter打包安卓提示请使用 -Xlint:deprecation 重新编译、请使用 -Xlint:unchecked 重新编译
  9. 链接标签(HTML)
  10. sklearn中的降维算法(PCA)(原理相关)-1
  11. Google Analytics(分析)网址构建器
  12. 好用到叫出声!强烈推荐 10 款 Mac 软件!
  13. 推荐一个在线办公协作的
  14. zing开发者_Zing免费开放Java开发人员
  15. 【GNURadio实验报告】实验2-使用GNURadio仿真OOK信号
  16. Python编程从入门到实践:动手试一试8-3T恤
  17. 日常BUG总结:虚拟机centos7无法识别网卡
  18. 【帮帮】移动互联网的“浑水”
  19. html 个人主页效果实例,html ------个人主页制作示例(div布局)
  20. 使用libtiff库生成tif文件,格式转换。

热门文章

  1. 在Ubuntu8.10中启用TrackPoint
  2. 路由器DRCOM教程
  3. 电竞天才Uzi退役:从网瘾少年到年薪千万,留下最大遗憾
  4. UI设计原型交互基础
  5. 使用ps修改图片大小不影响清晰度的方法
  6. 正态分布之中心极限定理
  7. ramda 函数 String
  8. Android自定义方式设置drawableleft图片大小
  9. 树莓派4B静态IP与屏幕分辨率设置
  10. JS 设置适配屏幕分辨率大小