通过递归实现List套List(树形结构)的属性复制

170 阅读1分钟

问题

需要将一个原始对象包装成业务方需要的对象。

@Data

public static class TagDTO{

    /**

 * 标签名

 */

 private String title;



    /**

 * 序号

 */

 private Long sort;



    /**

 * 子类列表

 */

 private Set<TagDTO> childrenList;

}

暂时无法在文档外展示此内容

这个用 BeanUtil.copyProperties() 不好整,因为内部还有个List。

嵌套的List,这样子就不能单纯看成一个属性,这个时候可以用递归解决。

办法

通过递归解决子类问题

public List<MaterialAttrsOptionsDTO> getChildMaterialAttrsOptionsDTO(Set<ExcelTagDTO.TagDTO> tagDTOS){

    //递归终止条件

    if(CollUtil.isEmpty(tagDTOS)){

        return new LinkedList<>();

    }

    return tagDTOS.stream().map(a->{

        MaterialAttrsOptionsDTO materialAttrsOptionsDTO = new MaterialAttrsOptionsDTO();

        BeanUtil.copyProperties(a,materialAttrsOptionsDTO);

        //递归获得子类

        materialAttrsOptionsDTO.setChildren(getChildMaterialAttrsOptionsDTO(a.getChildrenList()));

        return materialAttrsOptionsDTO;

    }).collect(Collectors.toList());

}