foreach jdk8 递归_Java8 stream流操作重构递归代码

本文介绍了如何使用Java8 Stream API重写一个递归生成树形结构的代码,涉及到List的流处理、映射、过滤、递归调用等多个步骤。在重构过程中,遇到编译错误,并分享了解决思路和完整重构后的代码。
摘要由CSDN通过智能技术生成

原代码:

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 -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值