说到菜单,大家都知道父菜单下面有子菜单,子菜单下面还有子菜单,那么如何实现这个递归获取菜单呢?
public List<ClassificationVo> findAllClassification() {
//查询所有菜单
List<ClassificationVo> dataList = classificationDao.findAllClassification();
if (CollectionUtils.isEmpty(classificationDOList)) {
return Collections.EMPTY_LIST;
}
// 获取顶层list
List<ClassificationVo> top = dataList.stream().filter(classificationDO1 -> classificationDO1.getPid().intValue() == 0).collect(Collectors.toList());
//根据pid分组
Map<Integer, List<ClassificationVo>> map = dataList.stream().collect(Collectors.groupingBy(ClassificationVo::getPid));
//查询菜单层级
List<ClassificationVo> classificationVos = treeCategoryData(top, map);
return classificationVos;
}
public List<ClassificationVo> treeCategoryData(List<ClassificationVo> top, Map<Integer, List<ClassificationVo>> allMap) {
//遍历
top.forEach(category -> {
List<ClassificationVo> temp = allMap.get(category.getValue());
if (temp != null && !temp.isEmpty()) {
category.setChildren(temp);
treeCategoryData(category.getChildren(), allMap);
} else {
category.setChildren(null);
}
});
return top;
}