java 树形结构通用封装类

本文介绍了一种基于递归算法的树形数据结构服务实现方法,通过将基础树形结构数据进行分类处理,实现从根节点到子节点的递归查询,最终形成完整的树形节点数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 基础树形结构数据服务类
 */
@Service
public class BaseTreeService {

    /**
     * 获取树结构数据
     * @return
     */
    public <T extends BaseTreeAO> ServiceResult<List<T>> listTreeNodes(List<T> allList) {
        ServiceResult<List<T>> ret = new ServiceResult<>();
        List<T> parentList = new ArrayList<>();//根节点
        List<T> classifyList = null;
        if ( !CollectionUtils.isEmpty(allList)) {
            classifyList = allList;
            for (T resource : allList) {
                if (StringUtils.isEmpty(resource.getParentId())) {
                    parentList.add(resource);
                }
            }
        }
        //返回的树形节点数据
        List<T> treeNodeList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(parentList)) {
            for (T parent:parentList) {
                //递归查询所有子节点
                treeNodeList.add(recursiveTree(parent, classifyList));
            }
        }
        ret.setData(treeNodeList);
        ret.setSucceed(true);
        return ret;
    }


    /**
     * 递归算法解析成树形结构
     */
    public <T extends BaseTreeAO> T recursiveTree(T parentNode, List<T> classifyList) {
        List<T> childTreeNodes = getChildTree(parentNode.getId(), classifyList);
        if (!CollectionUtils.isEmpty(childTreeNodes)) {
            for (T child : childTreeNodes) {
                T n = recursiveTree(child, classifyList);
                parentNode.getChildren().add(n);
            }
        }
        return parentNode;
    }

    /**
     * 根据父节点ID获取所有子节点
     */
    public <T extends BaseTreeAO>  List<T> getChildTree(String parentId, List<T> classifyList) {
        List<T> childNodes = new ArrayList<>();
        if (!CollectionUtils.isEmpty(classifyList)) {
            for (T resource : classifyList) {
                if (parentId.equals(resource.getParentId())) {
                    childNodes.add(resource);
                }
            }
        }
        return childNodes;
    }


}

 

//实体类,需要继承该实体类

public class BaseTreeAO<T> {

    private String id;

    private String parentId;

    /**
     * 子类
     */
    private List<T> children = new ArrayList<>();

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public List<T> getChildren() {
        return children;
    }

    public void setChildren(List<T> children) {
        this.children = children;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值