今天有个需求
需要写个目录
这不是简简单单
把之前的代码复制一份 修修变量名就大功告成了
但是出现了一个bug 改了两个小时
以为Integer是对象 所以两个Integer类型对象比较 比较的是内存地址 导致目录出现错误
真是无语
list是目录表所有数据
//组装成树形结构
List<AnalysisMenuVO> menuVOList = list.stream().filter(menu -> menu.getParentId()==0)
.sorted(Comparator.comparingInt(AnalysisMenuVO::getOrderNum))
.map(menu -> {
menu.setChildren(getChildrens(menu,list));
return menu;
}).collect(Collectors.toList());
//root 是父节点标签:return,stream,对象,menu,List,目录,Integer,比较 From: https://www.cnblogs.com/bawanglong168/p/16877932.html
private List<AnalysisMenuVO> getChildrens(AnalysisMenuVO root, List<AnalysisMenuVO> all) {
List<AnalysisMenuVO> children = all.stream().filter(menu -> menu.getParentId()==root.getMenuId() )
.sorted(Comparator.comparingInt(x -> ( x.getOrderNum())))
.map(menu -> {
menu.setChildren(getChildrens(menu,all));
return menu;
}).collect(Collectors.toList());
return children;
}
递归调用getchildrens 设置子列表
由于 最顶级目录是 0 所以目录会出来一层
其他层级目录 以为 是Integer 类型 不会自动拆箱 用的是对象比较 导致下面的出不来
一开始以为是底层查不到 被设置为null的
stream不好debug 还要把stream拆成散的 再去一点点查 真是无语