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