使用 Hutool的 TreeUtil 工具类
数据准备
public List<Tree<String>> selectTreeList(SpcArea spcArea) {
List<SpcArea> spcAreaList = selectList(spcArea);
// 构建node列表
List<TreeNode<String>> nodeList = spcAreaList.stream().map(spcAreaDO -> {
Map<String, Object> map = BeanUtil.beanToMap(spcAreaDO);
String areaIdStr = String.valueOf(spcAreaDO.getAreaId());
map.put("areaId", areaIdStr);
return new TreeNode<String>().setId(areaIdStr)
.setName(spcAreaDO.getName())
.setParentId(String.valueOf(spcAreaDO.getParentAreaId()))
.setExtra(map);
}).collect(Collectors.toList());
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名
treeNodeConfig.setIdKey("areaId");
treeNodeConfig.setChildrenKey("childrenNode");
//转换器 "1" 为根节点id
List<Tree<String>> treeNodes = TreeUtil.build(nodeList, "1", treeNodeConfig,
(treeNode, tree) -> {
tree.setId(String.valueOf(treeNode.getId()));
tree.setParentId(String.valueOf(treeNode.getParentId()));
tree.setName(treeNode.getName());
// 扩展属性 ...
treeNode.getExtra().forEach(tree::putExtra);
});
return treeNodes;
}