@Override
public ResponseVO getListData(Integer opid) {
ResponseVO responseVO;
if (opid == null || opid.equals("")) {
return ResponseVO.error("opid不能为空!");
}
try {
List<FiletypeVO> list = filetypeMapper.getAllList(opid);
//将map放入
responseVO = ResponseVO.ok().setResultData(ResultCode.LIST, getTreeByColl(list));
} catch (Exception e) {
e.printStackTrace();
responseVO = ResponseVO.error().setErrMsg("查询失败!");
}
return responseVO;
}
public Map<String, Object> getTreeByColl(List<FiletypeVO> list) {
Map<String, Object> resmap = new HashMap<>();
Map<Integer, FiletypeVO> map;
List<FiletypeVO> treelist = new ArrayList<>();
//定父级
FiletypeVO vo = new FiletypeVO();
vo.setId(-1);
vo.setName("我的文件夹");
vo.setOpid(SysFunc.getOperatorID());
vo.setIssys(BigDecimal.valueOf(1));
treelist.add(vo);
FiletypeVO vo2 = new FiletypeVO();
vo2.setId(-2);
vo2.setName("共享文件夹");
vo2.setOpid(SysFunc.getOperatorID());//SysFunc.getOperatorID()
vo2.setIssys(BigDecimal.valueOf(1));
treelist.add(vo2);
//判断list为空时返回map
if (null == list || list.isEmpty()) {
resmap.put("list", treelist);
return resmap;
}
//表示选择FiletypeVO的getId作为map的key值
//v -> v表示选择将原来的对象作为Map的value值
//(a,b)->a中,如果a与b的key值相同,选择a作为那个key所对应的value值
//如果key(a)重复,不加(a,b)->a会报错
//创建Stream流
map = list.stream()
//转换Stream流 collect分组
.collect(
//Collectors工具类就是在为Collector服务
Collectors
//使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。
//toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。
.toMap(FiletypeVO::getId, v -> v, (a, b) -> a));
/*List<Map.Entry<Integer, (FiletypeVO>> listMap = new ArrayList<Map.Entry<Integer, (FiletypeVO>>(map.entrySet());
Collections.sort(listMap, new Comparator<Map.Entry<Integer, (FiletypeVO>>() {
public int compare(Map.Entry<Integer, (FiletypeVO> o1, Map.Entry<Integer, (FiletypeVO> o2) {
return o2.getKey().compareTo(o1.getKey());
}
});*/
for (FiletypeVO vo3 : list) {
if (map.get(vo3.getParentid()) == null) {
if (vo3.getOpid() == SysFunc.getOperatorID()) {
vo.addChildren(vo3);
} else {
vo2.addChildren(vo3);
}
} else {
// 子级通过父id获取到父级的类型
FiletypeVO parent = map.get(vo3.getParentid());
// 父级获得子级,再将子级放到对应的父级中
parent.addChildren(vo3);
}
}
resmap.put("list", treelist);
return resmap;
}