Java - 返回树形结构数据
1.TreeNodeDto
@Data
public class TreeNodeDto {
private Long id;
private Long organizationId;
private Long parentOrgId;
private Integer level;
private Integer sort;
private String path;
private String code;
private String name;
private String note;
private List children = new ArrayList();
}
2.TreeUtil
/**
* 返回树形结构数据
*
* @author dijk
*/
public class TreeUtil {
public static List<TreeNodeDto> formatter(List<TreeNodeDto> list) {
//定义map集合封装参数
Map<Long, TreeNodeDto> map = new HashMap<>(50);
for (TreeNodeDto treeNode : list) {
//遍历list将结点id封装进map中
map.put(treeNode.getOrganizationId(), treeNode);
}
//设置父子级关系
return addChildren(list, map);
}
private static List<TreeNodeDto> addChildren(List<TreeNodeDto> list, Map<Long, TreeNodeDto> map) {
List<TreeNodeDto> rootNodes = new ArrayList<>();
for (TreeNodeDto treeNode : list) {
TreeNodeDto parentNode = map.get(treeNode.getParentOrgId());
if (parentNode != null) {
//存在父级结点
parentNode.getChildren().add(treeNode);
} else {
//没有父级节点,即本身为根结点
rootNodes.add(treeNode);
}
}
return rootNodes;
}
}