Package org.miaixz.bus.core.tree
Class HierarchyIterator<T>
java.lang.Object
org.miaixz.bus.core.tree.HierarchyIterator<T>
- Type Parameters:
T- 元素类型
- All Implemented Interfaces:
Iterator<T>
用于迭代层级结构(比如树或图)的迭代器, 支持广度优先与深度优先两种遍历模式。
迭代器仅适用于访问层级结构,因此不支持Iterator.remove()方法。 要构建树或者操作数,请参见BeanTree或TreeKit。
该迭代器侧重于打通图或树这类数据结构与传统集合间的隔阂, 从而支持通过传统可迭代集合的方式对树或图中的节点进行操作。 比如:
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 Summary
FieldsModifier and TypeFieldDescription已经访问过的列表protected final Function<T, Collection<T>> 下一层级节点的获取方法节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略protected final LinkedList<T> 当前待遍历的节点 -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> HierarchyIterator<T> breadthFirst(T root, Function<T, Collection<T>> nextDiscoverer) 获取一个迭代器,用于按广度优先迭代层级结构中的每一个结点static <T> HierarchyIterator<T> breadthFirst(T root, Function<T, Collection<T>> nextDiscoverer, Predicate<T> filter) 获取一个迭代器,用于按广度优先迭代层级结构中的每一个结点protected abstract voidcollectNextElementsToQueue(Collection<T> nextElements) 将下一层级的节点搜集到队列static <T> HierarchyIterator<T> depthFirst(T root, Function<T, Collection<T>> nextDiscoverer) 获取一个迭代器,用于按深度优先迭代层级结构中的每一个结点static <T> HierarchyIterator<T> depthFirst(T root, Function<T, Collection<T>> nextDiscoverer, Predicate<T> filter) 获取一个迭代器,用于按深度优先迭代层级结构中的每一个结点booleanhasNext()是否仍有下一个节点next()获取下一个节点Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.Iterator
forEachRemaining, remove
-
Field Details
-
elementDiscoverer
下一层级节点的获取方法 -
filter
节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略 -
accessed
已经访问过的列表 -
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
获取一个迭代器,用于按深度优先迭代层级结构中的每一个结点- Type Parameters:
T- 元素类型- Parameters:
root- 根节点,根节点不允许被filter过滤nextDiscoverer- 下一层级节点的获取方法- Returns:
- 迭代器
-
hasNext
public boolean hasNext()是否仍有下一个节点 -
next
获取下一个节点 -
collectNextElementsToQueue
将下一层级的节点搜集到队列- Parameters:
nextElements- 待收集的下一层级的节点- See Also:
-