Java组装树形列表并排序显示

682 阅读1分钟

小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动

树形列表,又名无极分类,方法代码如下,数据库操作代码省略

  /**
     * 图层目录-树状列表
     *
     * @param param
     * @Description:list method
     * @Author: tarzan Liu
     * @Date: 2019/12/6 11:14
     */
    public ResponseDTO<List<LayerTypeTreeDTO>> list(LayerTypeParamDTO param) {
        EntityWrapper<LayerTypeEntity> wrapper = new EntityWrapper<>();
        wrapper.eq("drawing_id", param.getDrawingId());
        wrapper.like(StringUtils.isNotBlank(param.getName()), "name", param.getName());
        List<LayerTypeEntity> list = layerTypeDao.selectList(wrapper);
        List<LayerTypeTreeDTO> resultList = Lists.newArrayList();
        if (CollectionUtils.isNotEmpty(list)) {
            List<LayerTypeTreeDTO> sourceList = SmartBeanUtil.copyList(list, LayerTypeTreeDTO.class);
            resultList = sourceList.stream().filter(e -> e.getPid() == 0).collect(Collectors.toList());
            resultList.sort(Comparator.comparing(LayerTypeTreeDTO::getSort));
            resultList.forEach(e -> {
                assemblyTree(sourceList, e);
            });
        }
        return ResponseDTO.succData(resultList);
    }
 
    /**
     * 图层目录-组装树
     *
     * @param sourceList&parent
     * @Description:list method
     * @Author: tarzan Liu
     * @Date: 2019/12/6 11:14
     */
    public void assemblyTree(List<LayerTypeTreeDTO> sourceList, LayerTypeTreeDTO parent) {
        if (CollectionUtils.isNotEmpty(sourceList)) {
            List<LayerTypeTreeDTO> resultList = sourceList.stream().filter(e -> e.getPid().equals(parent.getId())).collect(Collectors.toList());
            resultList.sort(Comparator.comparing(LayerTypeTreeDTO::getSort));
            parent.setChildList(resultList);
            resultList.forEach(e -> {
                assemblyTree(sourceList, e);
            });
        }
    }

树形对象

@Data
public class LayerTypeTreeDTO {
 
 
    @ApiModelProperty("目录ID")
    private Long id;
 
    @ApiModelProperty("矿井/图 id")
    private Long drawingId;
 
    @ApiModelProperty("分类名称")
    private String name;
 
    @ApiModelProperty("父目录ID")
    private Long pid;
 
    @ApiModelProperty("排序")
    private Long sort;
 
    @ApiModelProperty("子类集合")
    private List<LayerTypeTreeDTO> childList;
 
 
}