树结构在业务开发中时常遇到,本文将详细实现一个树结果的生成。
1、 定义数据结构
本文首先定义主题结构,每个主题自己的主题信息、父主题Id、负责人等,并且为每个主题构建一个孩子结点列表。
public class SubjectDto implements Comparable {
/**
* 自增id
*/
protected Long id;
/**
* 创建时间
*
*/
protected Long createTime;
/**
* 更新时间
*
*/
protected Long updateTime;
/**
* 项目组id
*/
private Long pgId;
/**
* 集群Id
*/
private String clusterId;
/**
* 父主题id
*/
private Long parentId;
/**
* 主题名
*/
private String name;
/**
* 主题缩写
*/
private String abbr;
/**
* 主题描述
*/
private String description;
/**
* 主题层级
*/
private Integer level;
/**
* 顺序
*/
private Integer sort;
/**
* 是否是预置主题
* @see SubjectPresetFlag
*/
private Byte presetFlag;
/**
* 创建人
*
*/
private String creator;
/**
* 修改人
*
*/
private String modifier;
/**
* 全路径名
*/
private String fullName;
/**
* 全路径id
*/
private String fullId;
/**
* 主题子节点
*/
private List<SubjectDto> children;
/**
* 用户有该主题的当前用户
*/
private Set<UserSimpleDto> currentOwners;
/**
* 拥有该主题的所有用户
*/
private Set<UserSimpleDto> owners;
/**
* 负责人类型
*
* @see OwnerType
*/
private Integer ownerType;
public SubjectDto(Long id, String name, String abbr, Integer level,
Set<UserSimpleDto> owners, Long pgId, String clusterId) {
this.id = id;
this.name = name;
this.abbr = abbr;
this.level = level;
this.owners = owners;
this.pgId = pgId;
this.clusterId = clusterId;
}
/**
*
* @param o
* @return
*/
@Override
public int compareTo(Object o) {
SubjectDto subjectDto = (SubjectDto) o;
return t