栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Hutool TreeUtil工具使用,将数组数据转为树形结构(如将全国省份数组按parentid转为树形)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hutool TreeUtil工具使用,将数组数据转为树形结构(如将全国省份数组按parentid转为树形)

maven pom:
            
                cn.hutool
                hutool-all
                5.5.6
            
第一种方式构建Tree
public static void main(String[] args) {
        
    // 构建node列表(数据源)
    List> 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> 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 nodeList = list();
    //转换器 "0" - 最顶层父id值 一般为0之类  nodeList – 源数据集合
    List> 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 childrenList;
}

使用工具类实现:

 List gdtCityList = JSON.parseArray(JSONObject.toJSONString(data.get("list")), GdtCityVo.class);
//接收媒体返回省市实体类
 TreeNodeConfig config = new TreeNodeConfig();
        config.setDeep(4);//设置深度层级
        config.setChildrenKey("childrenList");
        List> 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
                },

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号