递归实现树结构封装

这里写自定义目录标题

简介

作为一名两年的程序猿,每每需要用到递归的都要头疼一番,所以今天就再这里写一个案例,记录一下自己递归实现树结构的封装.

代码实现

1.DataSourceTreeDomain.java用于返回给页面展示

@Data
public class DataSourceTreeDomain {

    @ApiModelProperty(value = "ID")
    private Long id;

    @ApiModelProperty(value = "元数据名称")
    private String resourceName;

    @ApiModelProperty(value = "父ID")
    private Long msgParentId;

    @ApiModelProperty(value = "信息资源名称或分类")
    private String msgResourceName;

    @ApiModelProperty(value = "子树")
    List<DataSourceTreeDomain> children = new ArrayList<>();
}

2.方法实现

    public List<DataSourceTreeDomain> listTree() {
        Iterable<DataSource> dataSourceIterable = dataSourceRepository.findAll();
        List<DataSourceTreeDomain> dataSourceTreeDomainList = new ArrayList<>();
        Map<Long, List<DataSource>> dataSourceTree = new HashMap<>();
        dataSourceIterable.forEach(dataSource -> {
            if(dataSource.getMsgParentId() == null){
                DataSourceTreeDomain dataSourceTreeDomain = new DataSourceTreeDomain();
                BeanUtils.copyProperties(dataSource,dataSourceTreeDomain);
                dataSourceTreeDomainList.add(dataSourceTreeDomain);
            }else{
                List<DataSource> dataSources = dataSourceTree.get(dataSource.getMsgParentId());
                if(dataSources == null){
                    dataSources = new ArrayList<>();
                }
                dataSources.add(dataSource);
                dataSourceTree.put(dataSource.getMsgParentId(),dataSources);
            }
        });
        dataSourceTreeDomainList.forEach(dataSourceTreeDomain -> recursiveDataSource(dataSourceTreeDomain,dataSourceTree));
        return dataSourceTreeDomainList;
    }

3.封装树结构

    private void recursiveDataSource(DataSourceTreeDomain dataSourceTreeDomain, Map<Long, List<DataSource>> dataSourceTree) {
        List<DataSource> dataSourceList = dataSourceTree.get(dataSourceTreeDomain.getId());
        Optional.ofNullable(dataSourceList).ifPresent(dataSources -> dataSources.forEach(dataSource -> {
            DataSourceTreeDomain dataSourceDomain = new DataSourceTreeDomain();
            BeanUtils.copyProperties(dataSource,dataSourceDomain);
            dataSourceTreeDomain.getChildren().add(dataSourceDomain);
            recursiveDataSource(dataSourceDomain,dataSourceTree);
        }));
    }

效果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值