原代码:
private static JSONArray produceTree(List resources,boolean needPermission){
JSONArray tree = new JSONArray();
if(resources!=null&&resources.size()>Number.ZERO) {//递归退出条件判断
for (Resource resource : resources) {
List resourceList=resourceService.queryChildTreeByPid(resource.getId());//根据父id查询子资源列表
JSONArray children = produceTree(resourceList,needPermission,staffName,roleId);//递归,一直向下查找
JSONObject node=TreeUtil.spellTree(resource);//转换为具体的树形式
if(children!=null&&children.size()>Number.ZERO){
node.put("children",children);
}else if(needPermission){//需要该资源下对应的权限信息(最后一级,判断下面有没有权限关系)
node=toPermission(resource.getId(),node,staffName);
}
tree.add(node);
}
}
return tree;
}
Resource结构如下:
@Data
public class Resource {
private Integer id;//资源id
private String resourceName;//资源名称
private String url;//资源地址 可能无用
private String icon;//资源图标
private String clue;// 树形结构横向线索
private Integer distance; // 到根节点的距离 纵向线索
private Integer parentId;// 父资源id
private String description; //资源描述
private Date createtime;//创建时间
private Integer state;// 0未删除 1已删除
List children;
}
现在想用java8 Stream流重写这段代码,大概是这样:
private static List recursive(List resources){
return resources.stream()
.map(Resource::getId)//第一步转换为id
.map(parentId->resourceService.queryChildTreeByPid(parentId))//第二步查找id下对应的资源(id相当于parentId使用)
.map(child->Optional.ofNullable(child).filter(obj -