Interface ForestMap<K,V>

Type Parameters:
K - key类型
V - value类型
All Superinterfaces:
Map<K,TreeEntry<K,V>>
All Known Implementing Classes:
LinkedForestMap

public interface ForestMap<K,V> extends Map<K,TreeEntry<K,V>>
基于多个TreeEntry构成的、彼此平行的树结构构成的森林集合。
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Nested Class Summary

    Nested classes/interfaces inherited from interface java.util.Map

    Map.Entry<K,V>
  • Method Summary

    Modifier and Type
    Method
    Description
    default boolean
    containsChildNode(K parentKey, K childKey)
    判断以该父节点作为根节点的树结构中是否具有指定子节点
    default boolean
    containsParentNode(K key, K parentKey)
    获取以指定节点作为叶子节点的树结构,然后确认该树结构中当前节点是否存在指定父节点
    获取指定父节点的全部子节点 比如:若存在 a -> b -> c 的关系,此时输入 b 将返回 c,输入 a 将返回 b,c
    获取指定父节点直接关联的子节点 比如:若存在 a -> b -> c 的关系,此时输入 b 将返回 c,输入 a 将返回 b
    default TreeEntry<K,V>
    获取指定节点的直接父节点 比如:若存在 a -> b -> c 的关系,此时输入 a 将返回 null,输入 b 将返回 a,输入 c 将返回 b
    default V
    获取指定节点的值
    default TreeEntry<K,V>
    getParentNode(K key, K parentKey)
    获取以指定节点作为叶子节点的树结构,然后获取该树结构中指定节点的指定父节点
    default TreeEntry<K,V>
    获取以指定节点作为叶子节点的树结构,然后获取该树结构的根节点 比如:存在 a -> b -> c 的关系,则输入 a/b/c 都将返回 a
    default Set<TreeEntry<K,V>>
    获取指定节点所在树结构的全部树节点 比如:存在 a -> b -> c 的关系,则输入 a/b/c 都将返回 a, b, c
    default void
    linkNodes(K parentKey, K childKey)
    为集合中的指定的节点建立父子关系
    void
    linkNodes(K parentKey, K childKey, BiConsumer<TreeEntry<K,V>,TreeEntry<K,V>> consumer)
    为集合中的指定的节点建立父子关系
    default TreeEntry<K,V>
    put(K key, TreeEntry<K,V> node)
    添加一个节点,效果等同于 putNode(data, node.getValue()) 若key对应节点不存在,则以传入的键值创建一个新的节点; 若key对应节点存在,则将该节点的值替换为node指定的值;
    default void
    putAll(Map<? extends K,? extends TreeEntry<K,V>> treeEntryMap)
    批量添加节点,若节点具有父节点或者子节点,则一并在当前实例中引入该关系
    default <C extends Collection<V>>
    void
    putAllNode(C values, Function<V,K> keyGenerator, Function<V,K> parentKeyGenerator, boolean ignoreNullNode)
    批量添加节点
    void
    putLinkedNodes(K parentKey, K childKey, V childValue)
    添加子节点,并为子节点指定父节点: 若parentKeychildKey对应的节点不存在,则会根据键值创建一个对应的节点; 若parentKeychildKey对应的节点存在,则会更新对应节点的值;
    default void
    putLinkedNodes(K parentKey, V parentValue, K childKey, V childValue)
    同时添加父子节点: 若parentKeychildKey对应的节点不存在,则会根据键值创建一个对应的节点; 若parentKeychildKey对应的节点存在,则会更新对应节点的值; 该操作等同于:
    putNode(K key, V value)
    添加一个节点 若key对应节点不存在,则以传入的键值创建一个新的节点; 若key对应节点存在,则将该节点的值替换为node指定的值;
    void
    unlinkNode(K parentKey, K childKey)
    parentKeychildKey对应节点都存在,则移除指定该父节点与其直接关联的指定子节点间的引用关系
  • Method Details

    • put

      default TreeEntry<K,V> put(K key, TreeEntry<K,V> node)
      添加一个节点,效果等同于 putNode(data, node.getValue())
      • 若key对应节点不存在,则以传入的键值创建一个新的节点;
      • 若key对应节点存在,则将该节点的值替换为node指定的值;
      Specified by:
      put in interface Map<K,V>
      Parameters:
      key - 节点的key值
      node - 节点
      Returns:
      节点,若key已有对应节点,则返回具有旧值的节点,否则返回null
      See Also:
    • putAll

      default void putAll(Map<? extends K,? extends TreeEntry<K,V>> treeEntryMap)
      批量添加节点,若节点具有父节点或者子节点,则一并在当前实例中引入该关系
      Specified by:
      putAll in interface Map<K,V>
      Parameters:
      treeEntryMap - 节点集合
    • putAllNode

      default <C extends Collection<V>> void putAllNode(C values, Function<V,K> keyGenerator, Function<V,K> parentKeyGenerator, boolean ignoreNullNode)
      批量添加节点
      Type Parameters:
      C - 集合类型
      Parameters:
      values - 要添加的值
      keyGenerator - 从值中获取key的方法
      parentKeyGenerator - 从值中获取父节点key的方法
      ignoreNullNode - 是否获取到的key为null的子节点/父节点
    • putNode

      TreeEntry<K,V> putNode(K key, V value)
      添加一个节点
      • 若key对应节点不存在,则以传入的键值创建一个新的节点;
      • 若key对应节点存在,则将该节点的值替换为node指定的值;
      Parameters:
      key - 节点的key
      value - 节点的value
      Returns:
      节点,若key已有对应节点,则返回具有旧值的节点,否则返回null
    • putLinkedNodes

      default void putLinkedNodes(K parentKey, V parentValue, K childKey, V childValue)
      同时添加父子节点:
      • parentKeychildKey对应的节点不存在,则会根据键值创建一个对应的节点;
      • parentKeychildKey对应的节点存在,则会更新对应节点的值;
      该操作等同于:
      
           putNode(parentKey, parentValue);
           putNode(childKey, childValue);
           linkNodes(parentKey, childKey);
       
      Parameters:
      parentKey - 父节点的key
      parentValue - 父节点的value
      childKey - 子节点的key
      childValue - 子节点的值
    • putLinkedNodes

      void putLinkedNodes(K parentKey, K childKey, V childValue)
      添加子节点,并为子节点指定父节点:
      • parentKeychildKey对应的节点不存在,则会根据键值创建一个对应的节点;
      • parentKeychildKey对应的节点存在,则会更新对应节点的值;
      Parameters:
      parentKey - 父节点的key
      childKey - 子节点的key
      childValue - 子节点的值
    • linkNodes

      default void linkNodes(K parentKey, K childKey)
      为集合中的指定的节点建立父子关系
      Parameters:
      parentKey - 父节点的key
      childKey - 子节点的key
    • linkNodes

      void linkNodes(K parentKey, K childKey, BiConsumer<TreeEntry<K,V>,TreeEntry<K,V>> consumer)
      为集合中的指定的节点建立父子关系
      Parameters:
      parentKey - 父节点的key
      childKey - 子节点的key
      consumer - 对父节点和子节点的操作,允许为null
    • unlinkNode

      void unlinkNode(K parentKey, K childKey)
      parentKeychildKey对应节点都存在,则移除指定该父节点与其直接关联的指定子节点间的引用关系
      Parameters:
      parentKey - 父节点的key
      childKey - 子节点
    • getTreeNodes

      default Set<TreeEntry<K,V>> getTreeNodes(K key)
      获取指定节点所在树结构的全部树节点 比如:存在 a -> b -> c 的关系,则输入 a/b/c 都将返回 a, b, c
      Parameters:
      key - 指定节点的key
      Returns:
      节点
    • getRootNode

      default TreeEntry<K,V> getRootNode(K key)
      获取以指定节点作为叶子节点的树结构,然后获取该树结构的根节点 比如:存在 a -> b -> c 的关系,则输入 a/b/c 都将返回 a
      Parameters:
      key - 指定节点的key
      Returns:
      节点
    • getDeclaredParentNode

      default TreeEntry<K,V> getDeclaredParentNode(K key)
      获取指定节点的直接父节点 比如:若存在 a -> b -> c 的关系,此时输入 a 将返回 null,输入 b 将返回 a,输入 c 将返回 b
      Parameters:
      key - 指定节点的key
      Returns:
      节点
    • getParentNode

      default TreeEntry<K,V> getParentNode(K key, K parentKey)
      获取以指定节点作为叶子节点的树结构,然后获取该树结构中指定节点的指定父节点
      Parameters:
      key - 指定节点的key
      parentKey - 指定父节点key
      Returns:
      节点
    • containsParentNode

      default boolean containsParentNode(K key, K parentKey)
      获取以指定节点作为叶子节点的树结构,然后确认该树结构中当前节点是否存在指定父节点
      Parameters:
      key - 指定节点的key
      parentKey - 指定父节点的key
      Returns:
      是否
    • getNodeValue

      default V getNodeValue(K key)
      获取指定节点的值
      Parameters:
      key - 节点的key
      Returns:
      节点值,若节点不存在,或节点值为null都将返回null
    • containsChildNode

      default boolean containsChildNode(K parentKey, K childKey)
      判断以该父节点作为根节点的树结构中是否具有指定子节点
      Parameters:
      parentKey - 父节点
      childKey - 子节点
      Returns:
      是否
    • getDeclaredChildNodes

      default Collection<TreeEntry<K,V>> getDeclaredChildNodes(K key)
      获取指定父节点直接关联的子节点 比如:若存在 a -> b -> c 的关系,此时输入 b 将返回 c,输入 a 将返回 b
      Parameters:
      key - data
      Returns:
      节点
    • getChildNodes

      default Collection<TreeEntry<K,V>> getChildNodes(K key)
      获取指定父节点的全部子节点 比如:若存在 a -> b -> c 的关系,此时输入 b 将返回 c,输入 a 将返回 b,c
      Parameters:
      key - data
      Returns:
      该节点的全部子节点