递归
案例一,菜单的递归
视频讲解
@Override
public List<Permission> queryAllMenuGuli() {
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("id");
List<Permission> permissionList = baseMapper.selectList(wrapper);
List<Permission> resultList = bulidPermission(permissionList);
return resultList;
}
public static List<Permission> bulidPermission(List<Permission> permissionList) {
List<Permission> finalNode = new ArrayList<>();
for(Permission permissionNode : permissionList) {
if("0".equals(permissionNode.getPid())) {
permissionNode.setLevel(1);
finalNode.add(selectChildren(permissionNode,permissionList));
}
}
return finalNode;
}
private static Permission selectChildren(Permission permissionNode, List<Permission> permissionList) {
permissionNode.setChildren(new ArrayList<Permission>());
for(Permission it : permissionList) {
if(permissionNode.getId().equals(it.getPid())) {
int level = permissionNode.getLevel()+1;
it.setLevel(level);
if(permissionNode.getChildren() == null) {
permissionNode.setChildren(new ArrayList<Permission>());
}
permissionNode.getChildren().add(selectChildren(it,permissionList));
}
}
return permissionNode;
}
案例二,单位树
Map<Long, List<SysOrg>> orgTree = new HashMap<>();
allManagerOrgIds.stream().forEach(x -> {
List<SysOrg> buildChild = new ArrayList<>();
List<SysOrg> topOrg = allChildOrgs.stream().filter(c -> c.getOrgId().equals(x)).collect(Collectors.toList());
buildChild.addAll(topOrg);
recursionFn(allChildOrgs, x, buildChild);
orgTree.put(x, buildChild);
});
private void recursionFn(List<SysOrg> allChildList, Long parentOrgId, List<SysOrg> newChildList) {
allChildList.stream().filter(x -> x.getParentId().equals(parentOrgId)).collect(Collectors.toList()).forEach(y -> {
newChildList.add(y);
recursionFn(allChildList, y.getOrgId(), newChildList);
});
}```