Class HierarchyIterator<T>

java.lang.Object
org.miaixz.bus.core.tree.HierarchyIterator<T>
Type Parameters:
T - 元素类型
All Implemented Interfaces:
Iterator<T>

public abstract class HierarchyIterator<T> extends Object implements Iterator<T>

用于迭代层级结构(比如树或图)的迭代器, 支持广度优先深度优先两种遍历模式。 迭代器仅适用于访问层级结构,因此不支持Iterator.remove()方法。 要构建树或者操作数,请参见BeanTreeTreeKit

该迭代器侧重于打通图或树这类数据结构与传统集合间的隔阂, 从而支持通过传统可迭代集合的方式对树或图中的节点进行操作。 比如:


 Tree root = // 构建树结构
 // 搜索树结构中所有级别为3的节点,并按权重排序
 List<Tree> thirdLevelNodes = StreamKit.iterateHierarchies(root, Tree:getChildren)
 	.filter(node -> node.getLevel() == 3)
 	.sorted(Comparator.comparing(Tree::getWeight))
 	.toList();
 
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Field Details

    • elementDiscoverer

      protected final Function<T,Collection<T>> elementDiscoverer
      下一层级节点的获取方法
    • filter

      protected final Predicate<T> filter
      节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略
    • accessed

      protected final Set<T> accessed
      已经访问过的列表
    • queue

      protected final LinkedList<T> queue
      当前待遍历的节点
  • Method Details

    • breadthFirst

      public static <T> HierarchyIterator<T> breadthFirst(T root, Function<T,Collection<T>> nextDiscoverer, Predicate<T> filter)
      获取一个迭代器,用于按广度优先迭代层级结构中的每一个结点
      Type Parameters:
      T - 元素类型
      Parameters:
      root - 根节点,根节点不允许被filter过滤
      nextDiscoverer - 下一层级节点的获取方法
      filter - 节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略
      Returns:
      迭代器
    • breadthFirst

      public static <T> HierarchyIterator<T> breadthFirst(T root, Function<T,Collection<T>> nextDiscoverer)
      获取一个迭代器,用于按广度优先迭代层级结构中的每一个结点
      Type Parameters:
      T - 元素类型
      Parameters:
      root - 根节点,根节点不允许被filter过滤
      nextDiscoverer - 下一层级节点的获取方法
      Returns:
      迭代器
    • depthFirst

      public static <T> HierarchyIterator<T> depthFirst(T root, Function<T,Collection<T>> nextDiscoverer, Predicate<T> filter)
      获取一个迭代器,用于按深度优先迭代层级结构中的每一个结点
      Type Parameters:
      T - 元素类型
      Parameters:
      root - 根节点,根节点不允许被filter过滤
      nextDiscoverer - 下一层级节点的获取方法
      filter - 节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略
      Returns:
      迭代器
    • depthFirst

      public static <T> HierarchyIterator<T> depthFirst(T root, Function<T,Collection<T>> nextDiscoverer)
      获取一个迭代器,用于按深度优先迭代层级结构中的每一个结点
      Type Parameters:
      T - 元素类型
      Parameters:
      root - 根节点,根节点不允许被filter过滤
      nextDiscoverer - 下一层级节点的获取方法
      Returns:
      迭代器
    • hasNext

      public boolean hasNext()
      是否仍有下一个节点
      Specified by:
      hasNext in interface Iterator<T>
      Returns:
      是否
    • next

      public T next()
      获取下一个节点
      Specified by:
      next in interface Iterator<T>
      Returns:
      下一个节点
    • collectNextElementsToQueue

      protected abstract void collectNextElementsToQueue(Collection<T> nextElements)
      将下一层级的节点搜集到队列
      Parameters:
      nextElements - 待收集的下一层级的节点
      See Also: