Java 8 中的 Stream 轻松遍历树形结构,是真的简单

话不多说,直接上代码

首先实体类,重点关注这种 childList 结构

@Data
public class BsOrg implements java.io.Serializable {
	@ApiModelProperty("机构编码")
	private String orgCode;
	@ApiModelProperty("机构名称")
	private String orgName;
	@ApiModelProperty("父级机构编码")
	private String parentCode;
	@ApiModelProperty("子菜单")
	private List<BsOrg> children;
}

for循环实现部门的树形结构的方法:

    public List<BsOrg> findSOrgList() {

        List<BsOrg> all = bsOrgDao.findAll();
        List<BsOrg> orgList = new ArrayList<>();
        Map<String, BsOrg> orgMap = new HashMap<>();
        for (BsOrg org : all) {
            org.setChildren(new ArrayList<BsOrg>());

            orgMap.put(org.getOrgCode(), org);
        }
        for (BsOrg org : all) {
            String parentCode = org.getParentCode();
            if ("0".equals(parentCode)) {
                orgList.add(org);
            } else {

                BsOrg parent = orgMap.get(org.getParentCode());
                if (parent != null) {
                    parent.getChildren().add(org);
                }
            }
        }

        return orgList;

    }

java8 Stream实现

 /**
     * @Description:查询机构结构
     * 
     * @author zhangzhiqing
     * @date  2022/3/24 10:32
     */
    public List<BsOrg> findSOrgList() {
        List<BsOrg> all = bsOrgDao.findAll();
        //获取父节点
        List<BsOrg> collect = all.stream().filter(m -> "0".equals(m.getParentCode())).map(
                (m) -> {
                    m.setChildren(getChildrens(m, all));
                    return m;
                }
        ).collect(Collectors.toList());

        return collect;
    }


   /**
     * 递归查询子节点
     * @param root  根节点
     * @param all   所有节点
     * @return 根节点信息
     */
    private List<BsOrg> getChildrens(BsOrg root, List<BsOrg> all) {
        List<BsOrg> children = all.stream().filter(m -> {
            return Objects.equals(m.getParentCode(), root.getOrgCode());
        }).map(
                (m) -> {
                    m.setChildren(getChildrens(m, all));
                    return m;
                }
        ).collect(Collectors.toList());
        return children;
    }

返回的结构,因为实体我做了删减 粘贴的里面字段比较多,这种Java 8 中的 Stream 轻松遍历树形结构,是真的简单_第1张图片

你可能感兴趣的:(java)