maven pom:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.6</version>
</dependency>
第一种方式构建Tree
public static void main(String[] args) {
// 构建node列表(数据源)
List<TreeNode<String>> nodeList = CollUtil.newArrayList();
nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));
nodeList.add(new TreeNode<>("11", "1", "用户管理", 222222));
nodeList.add(new TreeNode<>("111", "11", "用户添加", 0));
nodeList.add(new TreeNode<>("2", "0", "店铺管理", 1));
nodeList.add(new TreeNode<>("21", "2", "商品管理", 44));
nodeList.add(new TreeNode<>("221", "2", "商品管理2", 2));
// 0表示最顶层的id是0
List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");
System.out.println(JSON.toJSONString(treeList));
}
第二种自定义字段名
public static void main(String[] args) {
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名
treeNodeConfig.setWeightKey("order"); // 权重排序字段 默认为weight
treeNodeConfig.setIdKey("id"); // 默认为id可以不设置
treeNodeConfig.setNameKey("name"); // 节点名对应名称 默认为name
treeNodeConfig.setParentIdKey("parentId"); // 父节点 默认为parentId
treeNodeConfig.setChildrenKey("children"); // 子点 默认为children
treeNodeConfig.setDeep(3); // 可以配置递归深度 从0开始计算 默认此配置为空,即不限制
//数据源
List<Student> nodeList = list();
//转换器 "0" - 最顶层父id值 一般为0之类 nodeList – 源数据集合
List<Tree<String>> treeNodes = TreeUtil.build(nodeList, "0", treeNodeConfig,
// treeNode – 源数据实体
// tree – 树节点实体
(treeNode, tree) -> {
tree.setId(treeNode.getId());
tree.setParentId(treeNode.getParentId());
tree.setWeight(treeNode.getWeight());
tree.setName(treeNode.getName());
// 扩展属性 ...
tree.putExtra("extraField", 666);
tree.putExtra("other", new Object());
System.out.println(JSON.toJSONString(treeNodes));
}
实战(将省市数组转为树形):
省市list:
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "",
"parent_id": 0,
"name": "中国未知",
"id": 156
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "",
"parent_id": 0,
"name": "台湾省",
"id": 710000
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "台湾省未知",
"id": 719900
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "高雄市",
"id": 710200
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "花莲县",
"id": 712200
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "嘉义市",
"id": 710700
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "南投县",
"id": 711500
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "澎湖县",
"id": 712300
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "屏东县",
"id": 712000
},
{
"city_level": "CITY_LEVEL_NONE",
"parent_name": "台湾省",
"parent_id": 710000,
"name": "台北市",
"id": 710100
},
设置实体类接收:
@Data
public class GdtCityVo {
private Integer id;
private Integer parentId;
private String name;
private String cityLevel;
private List<GdtCityVo> childrenList;
}
使用工具类实现:
List<GdtCityVo> gdtCityList = JSON.parseArray(JSONObject.toJSONString(data.get("list")), GdtCityVo.class);
//接收媒体返回省市实体类
TreeNodeConfig config = new TreeNodeConfig();
config.setDeep(4);//设置深度层级
config.setChildrenKey("childrenList");
List<Tree<Integer>> build = TreeUtil.build(gdtCityList, 0, config, (object, tree) -> {
// 也可以使用 tree.setId(object.getId());等一些默认值
//这里使用反射挨个赋值
Field[] fields = ReflectUtil.getFieldsDirectly(object.getClass(), true);
for (Field field : fields) {
String fieldName = field.getName();
Object fieldValue = ReflectUtil.getFieldValue(object, field);
tree.putExtra(fieldName, fieldValue);
}
});
return build;
返回数据类型
"data": [
{
"id": 156,
"parentId": 0,
"name": "中国未知",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},
{
"id": 500000,
"parentId": 0,
"name": "重庆市",
"cityLevel": "CITY_LEVEL_SECOND",
"childrenList": [
{
"id": 500103,
"parentId": 500000,
"name": "渝中区",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},
{
"id": 500102,
"parentId": 500000,
"name": "涪陵区",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},
{
"id": 500101,
"parentId": 500000,
"name": "万州区",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},
{
"id": 500111,
"parentId": 500000,
"name": "大足区",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},
{
"id": 500110,
"parentId": 500000,
"name": "綦江区",
"cityLevel": "CITY_LEVEL_NONE",
"childrenList": null
},