//得到所有的菜单数据
List<FunctionJson> indoMenu = getList()
// 得到所有的父菜单,顶级菜单
List<FunctionJson> parentIds = indoMenu.stream().filter(item -> item.getFid().equals("-1")).collect(Collectors.toList());
//得到所有的子级菜单
List<FunctionJson> childIds = indoMenu.stream().filter(item -> !item.getFid().equals("-1")).collect(Collectors.toList());
//将子级菜单,根据父id分组
Map<String, List<FunctionJson>> collectMap = childIds.stream().collect(Collectors.groupingBy(item -> item.getFid()));
doTree(parentIds, collectMap);
return parentIds;
}
private void doTree(List<FunctionJson> parentIds, Map<String, List<FunctionJson>> collectMap) {
//遍历父节点的集合
parentIds.forEach(item -> {
//根据父id取值,看是否有值
if (!CollectionUtils.isEmpty(collectMap.get(item.getId()))) {
item.setChildren(collectMap.get(item.getId()));
//还有子类,将子类当做父类,继续取子类的子类,直到取完
doTree(item.getChildren(), collectMap);
}
});
}