这几天好累好累啊 主要是因为前后联调和新任务 搞得我晕头转向的 但是在项目中构建功能时 我发现了一个问题 就是在stream流中 对Long型数据进行判断操作时 会出现无效的情况 下面详细说明此次情况
情景:进行机构-菜单树的数据查询时,需要根据pid判断该菜单是否为顶级菜单,此时pid为null
下面是生成菜单树的方法,在实际情况下,当pid为null时,if中的条件永远为false,即逻辑符号‘||’左右的条件均为假。
private List<UdcMenuVo> treeUtil(List<UdcMenuVo> menuVos, Long pid) {
List<UdcMenuVo> treeList = new ArrayList<>();
menuVos.forEach(menu -> {
if (null == pid || pid.equals(menu.getPid())) {
menu.setList(treeUtil(menuVos, menu.getMenuId()));
treeList.add(menu);
}
});
return treeList;
}
在查询出来的数据中虽然形成了树结构,但是没有过滤掉非顶级菜单,于是我又写了一个stream流的过滤,准备将非顶级菜单过滤掉,但是这样根本无法过滤,仍然无效。
List<UdcMenuVo> tree = menuVos.stream().filter(s->s.getPid() == null)
.collect(Collectors.toList());
最后我在将机构和菜单组合时使用for循环连接,其中的if条件使用如下,此时的判断才过滤掉非顶级菜单,真是日了狗了。
if (udcMenuVo.getBranchCode().equals(udcBranchVo.getBranchCode())
&& null == udcMenuVo.getPid())
对于为什么在stream流中Long类型的数据为空时的判断会失效,我也是一脸懵,暂时没有找到答案,也恳请知道缘由的大佬能指点我一下,感谢。