使用HuTool的TreeUtil组织树结构数据的示例。
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="Dept对象", description="机构实体类")
public class Dept implements Serializable {
private static final long serialVersionUID = 8857218564564564616L;
@ApiModelProperty(value = "机构id")
private Long id;
@ApiModelProperty(value = "机构名称")
private String deptName;
@ApiModelProperty(value = "上级机构id")
private Long parentDeptId;
@ApiModelProperty(value = "同级排序值")
private Integer sort;
@ApiModelProperty(value = "描述")
private String description;
}
@GetMapping("/queryAllDepts")
public Result<?> queryAllDepts(){
// 1 数据库查询所有机构数据
List<Dept> allDepts = iDeptService.queryAllDepts();
// 2 每条记录都转成HuTool中的树节点类型
List<TreeNode<String>> treeNodeList = new ArrayList<>();
for (Dept dept : allDepts){
TreeNode<String> treeNode = new TreeNode<>(dept.getId().toString(), dept.getParentDeptId().toString(), dept.getDeptName(), dept.getSort());
Map<String, Object> extra = new HashMap<>();
extra.put("description", dept.getDescription());
treeNode.setExtra(extra);
treeNodeList.add(treeNode);
}
// 2 配置HuTool的TreeUtil
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setIdKey("id");
treeNodeConfig.setParentIdKey("parentDeptId");
treeNodeConfig.setChildrenKey("childrenList");
treeNodeConfig.setNameKey("deptName");
treeNodeConfig.setWeightKey("sort");
// 3 转成树
List<Tree<String>> treeList = TreeUtil.build(treeNodeList, "0", treeNodeConfig, (treeNode, tree) -> {
tree.setId(treeNode.getId());
tree.setParentId(treeNode.getParentId());
tree.setWeight(treeNode.getWeight());
tree.setName(treeNode.getName());
// 扩展属性 ...
tree.putExtra("description", treeNode.getExtra().get("description"));
});
return ResultGenerator.genSuccessResult(treeList);
}