Class MapTree<T>

Type Parameters:
T - ID类型
All Implemented Interfaces:
Serializable, Cloneable, Comparable<Node<T>>, Map<String,Object>, SequencedMap<String,Object>, Node<T>

public class MapTree<T> extends LinkedHashMap<String,Object> implements Node<T>
通过转换器将你的实体转化为TreeNodeMap节点实体 属性都存在此处,属性有序,可支持排序
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Constructor Details

    • MapTree

      public MapTree()
      构造
    • MapTree

      public MapTree(NodeConfig nodeConfig)
      构造
      Parameters:
      nodeConfig - TreeNode配置
  • Method Details

    • getConfig

      public NodeConfig getConfig()
      获取节点配置
      Returns:
      节点配置
    • getParent

      public MapTree<T> getParent()
      获取父节点
      Returns:
      父节点
    • setParent

      public MapTree<T> setParent(MapTree<T> parent)
      设置父节点
      Parameters:
      parent - 父节点
      Returns:
      this
    • getNode

      public MapTree<T> getNode(T id)
      获取ID对应的节点,如果有多个ID相同的节点,只返回第一个。 此方法只查找此节点及子节点,采用广度优先遍历。
      Parameters:
      id - ID
      Returns:
      节点
    • getParentsName

      public List<CharSequence> getParentsName(T id, boolean includeCurrentNode)
      获取所有父节点名称列表

      比如有个人在研发1部,他上面有研发部,接着上面有技术中心 返回结果就是:[研发一部, 研发中心, 技术中心]

      Parameters:
      id - 节点ID
      includeCurrentNode - 是否包含当前节点的名称
      Returns:
      所有父节点名称列表
    • getParentsName

      public List<CharSequence> getParentsName(boolean includeCurrentNode)
      获取所有父节点名称列表

      比如有个人在研发1部,他上面有研发部,接着上面有技术中心 返回结果就是:[研发一部, 研发中心, 技术中心]

      Parameters:
      includeCurrentNode - 是否包含当前节点的名称
      Returns:
      所有父节点名称列表
    • getId

      public T getId()
      Description copied from interface: Node
      获取ID
      Specified by:
      getId in interface Node<T>
      Returns:
      ID
    • setId

      public MapTree<T> setId(T id)
      Description copied from interface: Node
      设置ID
      Specified by:
      setId in interface Node<T>
      Parameters:
      id - ID
      Returns:
      this
    • getParentId

      public T getParentId()
      Description copied from interface: Node
      获取父节点ID
      Specified by:
      getParentId in interface Node<T>
      Returns:
      父节点ID
    • setParentId

      public MapTree<T> setParentId(T parentId)
      Description copied from interface: Node
      设置父节点ID
      Specified by:
      setParentId in interface Node<T>
      Parameters:
      parentId - 父节点ID
      Returns:
      this
    • getName

      public CharSequence getName()
      Description copied from interface: Node
      获取节点标签名称
      Specified by:
      getName in interface Node<T>
      Returns:
      节点标签名称
    • setName

      public MapTree<T> setName(CharSequence name)
      Description copied from interface: Node
      设置节点标签名称
      Specified by:
      setName in interface Node<T>
      Parameters:
      name - 节点标签名称
      Returns:
      this
    • getWeight

      public Comparable<?> getWeight()
      Description copied from interface: Node
      获取权重
      Specified by:
      getWeight in interface Node<T>
      Returns:
      权重
    • setWeight

      public MapTree<T> setWeight(Comparable<?> weight)
      Description copied from interface: Node
      设置权重
      Specified by:
      setWeight in interface Node<T>
      Parameters:
      weight - 权重
      Returns:
      this
    • getChildren

      public List<MapTree<T>> getChildren()
      获取所有子节点
      Returns:
      所有子节点
    • setChildren

      public MapTree<T> setChildren(List<MapTree<T>> children)
      设置子节点,设置后会覆盖所有原有子节点
      Parameters:
      children - 子节点列表,如果为null表示移除子节点
      Returns:
      this
    • hasChild

      public boolean hasChild()
      是否有子节点,无子节点则此为叶子节点
      Returns:
      是否有子节点
    • walk

      public void walk(Consumer<MapTree<T>> consumer)
      递归树并处理子树下的节点,采用深度优先遍历方式。
      Parameters:
      consumer - 节点处理器
    • walk

      public void walk(Consumer<MapTree<T>> consumer, boolean broadFirst)
      递归树并处理子树下的节点
      Parameters:
      consumer - 节点处理器
      broadFirst - 是否广度优先遍历
    • filterNew

      public MapTree<T> filterNew(Predicate<MapTree<T>> predicate)
      递归过滤并生成新的树 通过Predicate指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点
      Parameters:
      predicate - 节点过滤规则函数,只需处理本级节点本身即可,Predicate.test(Object)true保留,null表示全部保留
      Returns:
      过滤后的节点,null 表示不满足过滤要求,丢弃之
      See Also:
    • filter

      public MapTree<T> filter(Predicate<MapTree<T>> predicate)
      递归过滤当前树,注意此方法会修改当前树 通过Predicate指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点及其所有子节点,否则抛弃节点及其子节点
      Parameters:
      predicate - 节点过滤规则函数,只需处理本级节点本身即可,Predicate.test(Object)true保留,null表示保留全部
      Returns:
      过滤后的节点,null 表示不满足过滤要求,丢弃之
      See Also:
    • addChildren

      @SafeVarargs public final MapTree<T> addChildren(MapTree<T>... children)
      增加子节点,同时关联子节点的父节点为当前节点
      Parameters:
      children - 子节点列表
      Returns:
      this
    • putExtra

      public void putExtra(String key, Object value)
      扩展属性
      Parameters:
      key - 键
      value - 扩展值
    • toString

      public String toString()
      Overrides:
      toString in class AbstractMap<String,Object>
    • cloneTree

      public MapTree<T> cloneTree()
      递归克隆当前节点(即克隆整个树,保留字段值) 注意,此方法只会克隆节点,节点属性如果是引用类型,不会克隆
      Returns:
      新的节点