Integer对象比较

今天有个需求

需要写个目录

这不是简简单单

把之前的代码复制一份  修修变量名就大功告成了

 

但是出现了一个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 是父节点
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拆成散的 再去一点点查 真是无语
posted @ 2022-11-10 17:59  霸王龙168  阅读(36)  评论(0)    收藏  举报