28.树形结构工具类

这篇博客介绍了如何使用Java的Stream API和递归方法,通过泛型参数将列表转换为树形结构。重点讲解了TreeNodeDTO类的设计和listToTree方法的实现,展示了如何处理根节点和子节点关系。

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

public class TreeUtils {

    /**
     * @param list         全部节点列表
     * @param rootParentId 根节点ID
     * @param <T>          节点数据model
     * @return 树结构数据
     */
    public static <T extends TreeNodeDTO> List<T> listToTree(List<T> list, Long rootParentId) {
        return list.stream()
                .filter(treeNodeDTO -> treeNodeDTO.getParentId().equals(rootParentId))
                .peek(treeNodeDTO -> treeNodeDTO.setChildrenList(listToTree(list, treeNodeDTO.getId())))
                .collect(Collectors.toList());
    }

    public static class TreeNodeDTO {

        /**
         * ID
         */
        private Long id;

        /**
         * 父级ID
         */
        private Long parentId;

        /**
         * 子节点列表
         */
        private List<? extends TreeNodeDTO> childrenList;

        public Long getId() {
            return id;
        }

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

        public Long getParentId() {
            return parentId;
        }

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

        public List<? extends TreeNodeDTO> getChildrenList() {
            return childrenList;
        }

        public void setChildrenList(List<? extends TreeNodeDTO> childrenList) {
            this.childrenList = childrenList;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值