层级菜单构造--groupingby

成绩菜单数据构造–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分组

        @Override
        public 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值