Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

      • 简介
      • 树工具类-TreeUtil
      • 节点接口-Node
      • 节点解析器-NodeParser
      • 默认节点解析器-DefaultNodeParser
      • 树节点配置-TreeNodeConfig
        • 🎯 简介
        • 📋 核心特性
        • 🛠️ 类结构
        • 🚀 快速开始
          • 基本使用
          • 修改默认配置
        • 📖 详细方法
          • 获取默认配置
          • DEFAULT_CONFIG
          • 属性访问方法
          • getIdKey()
          • setIdKey(idKey)
          • getParentIdKey()
          • setParentIdKey(parentIdKey)
          • getWeightKey()
          • setWeightKey(weightKey)
          • getNameKey()
          • setNameKey(nameKey)
          • getChildrenKey()
          • setChildrenKey(childrenKey)
          • getDeep()
          • setDeep(deep)
        • 🎨 使用场景
          • 1. 自定义字段名
          • 2. 限制递归深度
          • 3. 适配不同数据源
        • 💡 注意事项
        • 🚀 性能优化
        • 🔍 最佳实践
        • 📝 总结
      • Lambda节点配置-LambdaTreeNodeConfig
      • 树节点基类-TreeNode
      • 基于Map的树节点-MapTree
      • Bean树构建工具-BeanTree
      • 树构建器-TreeBuilder
      • 层级迭代器-HierarchyIterator
    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 树结构(tree)
Hutool
2026-01-03
目录

树节点配置-TreeNodeConfig

# 🎯 简介

TreeNodeConfig 是 Hutool 树结构模块中的配置类,用于自定义树节点的各种属性名称和递归深度。通过该类,用户可以灵活配置树节点的字段名,以适应不同的业务场景和数据结构。

# 📋 核心特性

  • ✅ 支持自定义ID字段名
  • ✅ 支持自定义父节点ID字段名
  • ✅ 支持自定义权重字段名
  • ✅ 支持自定义名称字段名
  • ✅ 支持自定义子节点集合字段名
  • ✅ 支持配置递归深度
  • ✅ 提供默认配置对象
  • ✅ 支持链式调用
  • ✅ 实现了序列化接口

# 🛠️ 类结构

typedef TreeNodeConfig
  ├── 常量
  │   └── DEFAULT_CONFIG: TreeNodeConfig // 默认配置对象
  ├── 属性
  │   ├── idKey: String           // ID字段名,默认"id"
  │   ├── parentIdKey: String     // 父节点ID字段名,默认"parentId"
  │   ├── weightKey: String       // 权重字段名,默认"selector"
  │   ├── nameKey: String         // 名称字段名,默认"name"
  │   ├── childrenKey: String     // 子节点集合字段名,默认"children"
  │   └── deep: Integer           // 递归深度,默认null(不限制)
  └── 方法
      ├── getIdKey(): String      // 获取ID字段名
      ├── setIdKey(idKey): TreeNodeConfig // 设置ID字段名(链式)
      ├── getParentIdKey(): String // 获取父节点ID字段名
      ├── setParentIdKey(parentIdKey): TreeNodeConfig // 设置父节点ID字段名(链式)
      ├── getWeightKey(): String  // 获取权重字段名
      ├── setWeightKey(weightKey): TreeNodeConfig // 设置权重字段名(链式)
      ├── getNameKey(): String    // 获取名称字段名
      ├── setNameKey(nameKey): TreeNodeConfig // 设置名称字段名(链式)
      ├── getChildrenKey(): String // 获取子节点集合字段名
      ├── setChildrenKey(childrenKey): TreeNodeConfig // 设置子节点集合字段名(链式)
      ├── getDeep(): Integer      // 获取递归深度
      └── setDeep(deep): TreeNodeConfig // 设置递归深度(链式)

# 🚀 快速开始

# 基本使用

// 使用默认配置
TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG;

// 创建自定义配置
TreeNodeConfig customConfig = new TreeNodeConfig();
customConfig.setIdKey("nodeId")
    .setParentIdKey("pid")
    .setNameKey("nodeName")
    .setChildrenKey("subNodes")
    .setDeep(2); // 限制递归深度为2层

// 使用配置构建树
List<Map<String, Object>> tree = TreeUtil.build(nodeList, 0L, customConfig);

# 修改默认配置

// 创建并修改配置
TreeNodeConfig config = new TreeNodeConfig();

// 自定义字段名
config.setIdKey("uuid")
    .setParentIdKey("parentUuid")
    .setWeightKey("sort")
    .setNameKey("title")
    .setChildrenKey("items");

// 配置递归深度
config.setDeep(3); // 只构建3层树结构

Console.log("配置信息: {}", config);

# 📖 详细方法

# 获取默认配置

# DEFAULT_CONFIG

  • 功能:获取默认配置对象

  • 类型:静态常量

  • 默认值:idKey="id", parentIdKey="parentId", weightKey="selector", nameKey="name", childrenKey="children", deep=null

  • 使用场景:快速获取默认配置,无需手动设置

  • 示例:

    TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG;
    

# 属性访问方法

# getIdKey()

  • 功能:获取ID字段名

  • 返回值:ID字段名,默认"id"

  • 示例:

    String idKey = config.getIdKey();
    

# setIdKey(idKey)

  • 功能:设置ID字段名

  • 参数:idKey - ID字段名

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:自定义树节点的ID字段名

  • 示例:

    config.setIdKey("nodeId");
    

# getParentIdKey()

  • 功能:获取父节点ID字段名

  • 返回值:父节点ID字段名,默认"parentId"

  • 示例:

    String parentIdKey = config.getParentIdKey();
    

# setParentIdKey(parentIdKey)

  • 功能:设置父节点ID字段名

  • 参数:parentIdKey - 父节点ID字段名

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:自定义树节点的父节点ID字段名

  • 示例:

    config.setParentIdKey("pid");
    

# getWeightKey()

  • 功能:获取权重字段名

  • 返回值:权重字段名,默认"selector"

  • 示例:

    String weightKey = config.getWeightKey();
    

# setWeightKey(weightKey)

  • 功能:设置权重字段名

  • 参数:weightKey - 权重字段名

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:自定义树节点的权重字段名

  • 示例:

    config.setWeightKey("sort");
    

# getNameKey()

  • 功能:获取名称字段名

  • 返回值:名称字段名,默认"name"

  • 示例:

    String nameKey = config.getNameKey();
    

# setNameKey(nameKey)

  • 功能:设置名称字段名

  • 参数:nameKey - 名称字段名

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:自定义树节点的名称字段名

  • 示例:

    config.setNameKey("title");
    

# getChildrenKey()

  • 功能:获取子节点集合字段名

  • 返回值:子节点集合字段名,默认"children"

  • 示例:

    String childrenKey = config.getChildrenKey();
    

# setChildrenKey(childrenKey)

  • 功能:设置子节点集合字段名

  • 参数:childrenKey - 子节点集合字段名

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:自定义树节点的子节点集合字段名

  • 示例:

    config.setChildrenKey("items");
    

# getDeep()

  • 功能:获取递归深度

  • 返回值:递归深度,默认null(不限制)

  • 示例:

    Integer deep = config.getDeep();
    

# setDeep(deep)

  • 功能:设置递归深度

  • 参数:deep - 递归深度,从0开始计算

  • 返回值:当前配置实例,支持链式调用

  • 使用场景:限制树的递归深度,避免无限递归

  • 示例:

    config.setDeep(2); // 只构建2层树结构
    

# 🎨 使用场景

# 1. 自定义字段名

// 创建配置
TreeNodeConfig config = new TreeNodeConfig();

// 自定义字段名以匹配前端需求
config.setIdKey("key")
    .setParentIdKey("parentKey")
    .setNameKey("label")
    .setChildrenKey("value")
    .setWeightKey("order");

// 构建树
List<Map<String, Object>> tree = TreeUtil.build(nodeList, "0", config);

// 输出树结构
Console.log("自定义字段名树: {}", tree);

# 2. 限制递归深度

// 创建配置并限制递归深度
TreeNodeConfig config = new TreeNodeConfig();
config.setDeep(1); // 只构建1层树结构

// 假设nodeList有多层嵌套关系
List<Map<String, Object>> tree = TreeUtil.build(nodeList, 0L, config);

// 输出结果将只包含根节点和直接子节点
Console.log("限制深度的树: {}", tree);

# 3. 适配不同数据源

// 适配数据库查询结果
TreeNodeConfig config = new TreeNodeConfig();
config.setIdKey("category_id")
    .setParentIdKey("parent_category_id")
    .setNameKey("category_name")
    .setWeightKey("display_order")
    .setChildrenKey("sub_categories");

// 从数据库获取数据
List<Category> categories = categoryDao.findAll();

// 构建树
List<Map<String, Object>> categoryTree = TreeUtil.build(categories, "0", config);

Console.log("分类树: {}", categoryTree);

# 💡 注意事项

  1. 默认配置:DEFAULT_CONFIG 是一个静态常量,修改它会影响所有使用默认配置的地方
  2. 递归深度:
    • deep 从0开始计算,0表示只有根节点
    • 设置为null表示不限制深度
    • 建议在处理大量数据时设置合理的深度,避免内存溢出
  3. 字段名冲突:自定义字段名时,应避免与业务数据中的字段名冲突
  4. 权重字段名:默认权重字段名为"selector",可能与实际业务不符,建议根据需求修改
  5. 链式调用:所有setter方法都返回当前实例,支持链式调用
  6. 序列化:实现了Serializable接口,可以用于网络传输和持久化

# 🚀 性能优化

  • 对于大量数据,建议设置合理的递归深度,避免构建过深的树结构
  • 优先使用默认配置,减少对象创建开销
  • 对于固定配置,建议将配置对象缓存起来,避免重复创建

# 🔍 最佳实践

  1. 配置复用:对于相同业务场景的树结构,建议复用同一个配置对象
  2. 字段名规范:根据业务需求和前端要求,合理命名字段名
  3. 深度控制:根据数据量和业务需求,合理设置递归深度
  4. 默认配置扩展:基于默认配置进行修改,减少重复代码
  5. 注释说明:对配置进行注释,说明各字段的用途和取值

# 📝 总结

TreeNodeConfig 是 Hutool 树结构模块中的重要配置类,提供了灵活的字段名和递归深度配置选项。通过该类,用户可以根据不同的业务场景和数据结构,自定义树节点的各种属性名称,从而生成符合需求的树结构。

无论是适配前端组件的字段要求,还是处理不同数据源的字段差异,TreeNodeConfig 都能提供灵活的解决方案。同时,通过设置递归深度,可以有效控制树的复杂度,提高性能并避免内存溢出。

在实际开发中,建议根据具体业务需求,合理配置字段名和递归深度,以获得最佳的使用效果。

默认节点解析器-DefaultNodeParser
Lambda节点配置-LambdaTreeNodeConfig

← 默认节点解析器-DefaultNodeParser Lambda节点配置-LambdaTreeNodeConfig→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式