Java 递归生成层级树(通用)

2020-09-29  本文已影响0人  王疏蔬

通用于菜单树、机构树、组织树等

    /**
     * 返回层级结构树
     */
    public List<实体> getStructure() {
        //查询所有数据
        List<实体> allList = mapper.selectAll();
        //查询顶级数据
        List<实体> topList = mapper.getTop();
        //为一级数据设置子数据,getChild是递归调用的
        if (!CollectionUtils.isEmpty(topList)) { //不为空进入
            for (实体 entity : topList) {
                //需在实体创建存放结构树字段进行set
                entity.setHierarchy(getChild(entity.getId(), allList));
            }
        }
        return topList;
    }
 /**
 * 调用递归
 */
private List<实体> getChild(String id, List<实体> allList) {
    // 子级数据
    List<实体> childList = Lists.newArrayList();
    for (实体 entity : allList) {
        // 遍历所有节点,将父菜单id与传过来的id比较
        if (StringUtils.isNotBlank(entity.getParentId())) {
            if (entity.getParentId().equals(id)) {
                childList.add(entity);
            }
        }
    }
    // 把子级数据的子级再循环一遍
    for (实体 entity : childList) {
        if (StringUtils.isNotBlank(entity.getParentId())) {
            // 递归
            entity.setHierarchy(getChild(entity.getId(), allList));
        }
    }
    // 递归退出条件
    if (childList.size() == 0) {
        return null;
    }
    return childList;
}
上一篇下一篇

猜你喜欢

热点阅读