diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyIterator.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyIterator.java
deleted file mode 100644
index e8d6c054e..000000000
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyIterator.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.dromara.hutool.core.lang.hierarchy;
-
-import org.dromara.hutool.core.lang.mutable.Mutable;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-
-/**
- * 用于遍历层级结构的迭代器,提供了遍历过程中的回调方法:
- *
- * - {@link #isBreak}: 是否中断遍历,其在{@link #nextHierarchies}之前调用;
- * - {@link #nextHierarchies}: 获得下一需要遍历的层级,当为空时结束;
- * - {@link #getResult}: 当遍历完成后,获取迭代器结果;
- *
- *
- * 默认提供了三类{@link HierarchyIterator}实现:
- *
- * - scan: 遍历所有的层级结构;
- * - collector: 收集层级结构中所有符合条件的结果,并在结束遍历后返回所有结果;
- * - find: 找到层级结构中符合条件的结果后立刻中断遍历,并返回该结果;
- *
- * 可以实现自定义的{@link HierarchyIterator}来支持更多的遍历模式。
- *
- * @param 层级类型
- * @param 结果类型
- * @author huangchengxing
- * @since 6.0.0
- */
-@FunctionalInterface
-public interface HierarchyIterator {
-
- /**
- * 获取下一层级
- *
- * @param result 结果
- * @param hierarchy 当前层级
- * @return 向容器中添加元素的方法
- */
- Collection nextHierarchies(R result, H hierarchy);
-
- /**
- * 是否中断遍历
- *
- * @param hierarchy 当前层级
- * @return 是否中断遍历
- */
- default boolean isBreak(H hierarchy) {
- return false;
- }
-
- /**
- * 获取结果
- *
- * @return 结果
- */
- default R getResult() {
- return null;
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 当{@code finder}返回非空时, 迭代器立刻中断, 返回结果
- *
- * @param function 迭代器处理函数
- * @param finder 查找器
- * @param 层级结构类型
- * @param 迭代器结果类型
- * @return {@link HierarchyIterator}
- */
- static HierarchyIterator find(
- final Function> function, final Function finder) {
- Objects.requireNonNull(function);
- Objects.requireNonNull(finder);
- final Mutable mutable = Mutable.of(null);
- final Predicate terminator = h -> {
- R r = finder.apply(h);
- if (r != null) {
- mutable.set(r);
- return true;
- }
- return false;
- };
- return new HierarchyIteratorImpl<>(mutable::get, terminator, (r, h) -> function.apply(h));
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 迭代器结果总是为{@code null}
- *
- * @param function 迭代器处理函数
- * @param terminator 是否终止遍历
- * @param 层级结构类型
- * @return {@link HierarchyIterator}
- */
- static HierarchyIterator scan(
- final Function> function, final Predicate terminator) {
- Objects.requireNonNull(function);
- return new HierarchyIteratorImpl<>(() -> null, terminator, (r, h) -> function.apply(h));
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 迭代器结果总是为{@code null}
- *
- * @param function 迭代器处理函数
- * @param 层级结构类型
- * @return {@link HierarchyIterator}
- */
- static HierarchyIterator scan(final Function> function) {
- return scan(function, h -> false);
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 若{@code mapper}返回非空, 则将结果添加到集合中,最终返回集合
- *
- * @param function 迭代器处理函数
- * @param collFactory 集合工厂
- * @param mapper 迭代器结果映射函数
- * @param 层级结构类型
- * @param 迭代器结果类型
- * @param 集合类型
- * @return {@link HierarchyIterator}
- */
- static > HierarchyIterator collect(
- final Function> function, final Supplier collFactory, final Function mapper) {
- Objects.requireNonNull(function);
- Objects.requireNonNull(collFactory);
- Objects.requireNonNull(mapper);
- final C collection = collFactory.get();
- return new HierarchyIteratorImpl<>(() -> collection, h -> false, (r, h) -> {
- final R apply = mapper.apply(h);
- if (Objects.nonNull(apply)) {
- collection.add(apply);
- }
- return function.apply(h);
- });
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 若{@code mapper}返回非空, 则将结果添加到集合中,最终返回集合
- *
- * @param function 迭代器处理函数
- * @param mapper 迭代器结果映射函数
- * @param 层级结构类型
- * @param 迭代器结果类型
- * @return {@link HierarchyIterator}
- */
- static HierarchyIterator> collect(
- final Function> function, final Function mapper) {
- return collect(function, ArrayList::new, mapper);
- }
-
- /**
- * 创建一个{@link HierarchyIterator}对象, 则将非空结果添加到集合中,最终返回集合
- *
- * @param function 迭代器处理函数
- * @param 层级结构类型
- * @return {@link HierarchyIterator}
- */
- static HierarchyIterator> collect(
- final Function> function) {
- return collect(function, Function.identity());
- }
-
- /**
- * {@link HierarchyIterator}的基本实现。
- *
- * @param 层级类型
- * @param 结果类型
- */
- class HierarchyIteratorImpl implements HierarchyIterator {
-
- private final Supplier extends R> resultFactory;
- private final Predicate super H> hierarchyFilter;
- private final BiFunction super R, ? super H, ? extends Collection> hierarchyFinder;
-
- public HierarchyIteratorImpl(
- final Supplier extends R> resultFactory, final Predicate super H> hierarchyFilter,
- final BiFunction super R, ? super H, ? extends Collection> hierarchyFinder) {
- this.resultFactory = resultFactory;
- this.hierarchyFilter = hierarchyFilter;
- this.hierarchyFinder = hierarchyFinder;
- }
-
- /**
- * 获取下一层级
- *
- * @param result 结果
- * @param hierarchy 当前层级
- * @return 向容器中添加元素的方法
- */
- @Override
- public Collection nextHierarchies(final R result, final H hierarchy) {
- return hierarchyFinder.apply(result, hierarchy);
- }
-
- /**
- * 是否中断遍历
- *
- * @param hierarchy 当前层级
- * @return 是否中断遍历
- */
- @Override
- public boolean isBreak(final H hierarchy) {
- return hierarchyFilter.test(hierarchy);
- }
-
- /**
- * 获取结果
- *
- * @return 结果
- */
- @Override
- public R getResult() {
- return resultFactory.get();
- }
- }
-}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java
index b44a0cbdb..9973b2607 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java
@@ -13,6 +13,7 @@
package org.dromara.hutool.core.text;
import org.dromara.hutool.core.array.ArrayUtil;
+import org.dromara.hutool.core.func.FunctionPool;
import org.dromara.hutool.core.text.placeholder.StrFormatter;
import org.dromara.hutool.core.util.CharsetUtil;
@@ -219,6 +220,17 @@ public class StrUtil extends CharSequenceUtil implements StrPool {
}
return charset.decode(data).toString();
}
+
+ /**
+ * JDK8中,通过{@code String(char[] value, boolean share)}这个内部构造创建String对象。
+ * 此函数通过传入char[],实现zero-copy的String创建,效率很高。但是要求传入的char[]不可以在其他地方修改。
+ *
+ * @param value char[]值,注意这个数组不可修改!!
+ * @return String
+ */
+ public static String strFast(final char[] value){
+ return FunctionPool.createString(value);
+ }
// endregion
/**
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIterator.java b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIterator.java
new file mode 100644
index 000000000..0d7b41bad
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIterator.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.tree.hierarchy;
+
+import java.util.Collection;
+
+/**
+ * 用于遍历层级结构的迭代器,提供了遍历过程中的回调方法:
+ *
+ * - {@link #isBreak}: 是否中断遍历,其在{@link #nextHierarchies}之前调用;
+ * - {@link #nextHierarchies}: 获得下一需要遍历的层级,当为空时结束;
+ * - {@link #getResult}: 当遍历完成后,获取迭代器结果;
+ *
+ *
+ * 默认提供了三类{@code HierarchyIterator}实现:
+ *
+ * - scan: 遍历所有的层级结构;
+ * - collector: 收集层级结构中所有符合条件的结果,并在结束遍历后返回所有结果;
+ * - find: 找到层级结构中符合条件的结果后立刻中断遍历,并返回该结果;
+ *
+ * 可以实现自定义的{@code HierarchyIterator}来支持更多的遍历模式。
+ *
+ * @param 层级类型
+ * @param 结果类型
+ * @author huangchengxing
+ * @since 6.0.0
+ */
+@FunctionalInterface
+public interface HierarchyIterator {
+
+ /**
+ * 获取下一层级
+ *
+ * @param result 结果
+ * @param hierarchy 当前层级
+ * @return 向容器中添加元素的方法
+ */
+ Collection nextHierarchies(R result, H hierarchy);
+
+ /**
+ * 是否中断遍历
+ *
+ * @param hierarchy 当前层级
+ * @return 是否中断遍历
+ */
+ default boolean isBreak(final H hierarchy) {
+ return false;
+ }
+
+ /**
+ * 获取结果
+ *
+ * @return 结果
+ */
+ default R getResult() {
+ return null;
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorImpl.java b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorImpl.java
new file mode 100644
index 000000000..0362e0e9d
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorImpl.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.tree.hierarchy;
+
+import java.util.Collection;
+import java.util.function.BiFunction;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+/**
+ * {@code HierarchyIterator}的基本实现。
+ *
+ * @param 层级类型
+ * @param 结果类型
+ * @author huangchengxing
+ */
+public class HierarchyIteratorImpl implements HierarchyIterator {
+
+ private final Supplier extends R> resultFactory;
+ private final Predicate super H> hierarchyFilter;
+ private final BiFunction super R, ? super H, ? extends Collection> hierarchyFinder;
+
+ /**
+ * 构造
+ *
+ * @param resultFactory 结果创建类
+ * @param hierarchyFilter 层级过滤器
+ * @param hierarchyFinder 层级查找器
+ */
+ public HierarchyIteratorImpl(
+ final Supplier extends R> resultFactory, final Predicate super H> hierarchyFilter,
+ final BiFunction super R, ? super H, ? extends Collection> hierarchyFinder) {
+ this.resultFactory = resultFactory;
+ this.hierarchyFilter = hierarchyFilter;
+ this.hierarchyFinder = hierarchyFinder;
+ }
+
+ /**
+ * 获取下一层级
+ *
+ * @param result 结果
+ * @param hierarchy 当前层级
+ * @return 向容器中添加元素的方法
+ */
+ @Override
+ public Collection nextHierarchies(final R result, final H hierarchy) {
+ return hierarchyFinder.apply(result, hierarchy);
+ }
+
+ /**
+ * 是否中断遍历
+ *
+ * @param hierarchy 当前层级
+ * @return 是否中断遍历
+ */
+ @Override
+ public boolean isBreak(final H hierarchy) {
+ return hierarchyFilter.test(hierarchy);
+ }
+
+ /**
+ * 获取结果
+ *
+ * @return 结果
+ */
+ @Override
+ public R getResult() {
+ return resultFactory.get();
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorUtil.java
new file mode 100644
index 000000000..10b832596
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyIteratorUtil.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.tree.hierarchy;
+
+import org.dromara.hutool.core.lang.mutable.Mutable;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+/**
+ * {@link HierarchyIterator}创建工具类
+ *
+ * @author huangchengxing
+ * @since 6.0.0
+ */
+public class HierarchyIteratorUtil {
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 当{@code finder}返回非空时, 迭代器立刻中断, 返回结果
+ *
+ * @param function 迭代器处理函数
+ * @param finder 查找器
+ * @param 层级结构类型
+ * @param 迭代器结果类型
+ * @return {@code HierarchyIterator}
+ */
+ public static HierarchyIterator find(
+ final Function> function, final Function finder) {
+ Objects.requireNonNull(function);
+ Objects.requireNonNull(finder);
+ final Mutable mutable = Mutable.of(null);
+ final Predicate terminator = h -> {
+ final R r = finder.apply(h);
+ if (r != null) {
+ mutable.set(r);
+ return true;
+ }
+ return false;
+ };
+ return new HierarchyIteratorImpl<>(mutable::get, terminator, (r, h) -> function.apply(h));
+ }
+
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 迭代器结果总是为{@code null}
+ *
+ * @param function 迭代器处理函数
+ * @param terminator 是否终止遍历
+ * @param 层级结构类型
+ * @return {@code HierarchyIterator}
+ */
+ public static HierarchyIterator scan(
+ final Function> function, final Predicate terminator) {
+ Objects.requireNonNull(function);
+ return new HierarchyIteratorImpl<>(() -> null, terminator, (r, h) -> function.apply(h));
+ }
+
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 迭代器结果总是为{@code null}
+ *
+ * @param function 迭代器处理函数
+ * @param 层级结构类型
+ * @return {@code HierarchyIterator}
+ */
+ public static HierarchyIterator scan(final Function> function) {
+ return scan(function, h -> false);
+ }
+
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 若{@code mapper}返回非空, 则将结果添加到集合中,最终返回集合
+ *
+ * @param function 迭代器处理函数
+ * @param collFactory 集合工厂
+ * @param mapper 迭代器结果映射函数
+ * @param 层级结构类型
+ * @param 迭代器结果类型
+ * @param 集合类型
+ * @return {@code HierarchyIterator}
+ */
+ public static > HierarchyIterator collect(
+ final Function> function, final Supplier collFactory, final Function mapper) {
+ Objects.requireNonNull(function);
+ Objects.requireNonNull(collFactory);
+ Objects.requireNonNull(mapper);
+ final C collection = collFactory.get();
+ return new HierarchyIteratorImpl<>(() -> collection, h -> false, (r, h) -> {
+ final R apply = mapper.apply(h);
+ if (Objects.nonNull(apply)) {
+ collection.add(apply);
+ }
+ return function.apply(h);
+ });
+ }
+
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 若{@code mapper}返回非空, 则将结果添加到集合中,最终返回集合
+ *
+ * @param function 迭代器处理函数
+ * @param mapper 迭代器结果映射函数
+ * @param 层级结构类型
+ * @param 迭代器结果类型
+ * @return {@code HierarchyIterator}
+ */
+ public static HierarchyIterator> collect(
+ final Function> function, final Function mapper) {
+ return collect(function, ArrayList::new, mapper);
+ }
+
+ /**
+ * 创建一个{@code HierarchyIterator}对象, 则将非空结果添加到集合中,最终返回集合
+ *
+ * @param function 迭代器处理函数
+ * @param 层级结构类型
+ * @return {@code HierarchyIterator}
+ */
+ public static HierarchyIterator> collect(
+ final Function> function) {
+ return collect(function, Function.identity());
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtil.java
similarity index 89%
rename from hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtil.java
rename to hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtil.java
index 77abe2cfd..4e3a15561 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtil.java
@@ -1,4 +1,16 @@
-package org.dromara.hutool.core.lang.hierarchy;
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.tree.hierarchy;
import org.dromara.hutool.core.collection.CollUtil;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/package-info.java
new file mode 100644
index 000000000..1bb015dbb
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/tree/hierarchy/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+/**
+ * 用于处理层级结构的通用工具列,结构类似 Stream + Collector。
+ * HierarchyUtil 提供深度优先和广度优先算法实现,HierarchyIterator 则提供具体的操作逻辑
+ *
+ * @author huangchengxing
+ */
+package org.dromara.hutool.core.tree.hierarchy;
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtilTest.java
similarity index 67%
rename from hutool-core/src/test/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtilTest.java
rename to hutool-core/src/test/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtilTest.java
index acdd5ca1f..262b11f00 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/lang/hierarchy/HierarchyUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/tree/hierarchy/HierarchyUtilTest.java
@@ -1,18 +1,22 @@
-package org.dromara.hutool.core.lang.hierarchy;
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.tree.hierarchy;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -54,8 +58,8 @@ class HierarchyUtilTest {
@Test
void testTraverseByBreadthFirst() {
// 按广度优先遍历所有节点
- Set nodes = new LinkedHashSet<>();
- HierarchyUtil.traverseByBreadthFirst("0", HierarchyIterator.scan(t -> {
+ final Set nodes = new LinkedHashSet<>();
+ HierarchyUtil.traverseByBreadthFirst("0", HierarchyIteratorUtil.scan(t -> {
nodes.add(t);
return tree.entrySet().stream()
.filter(e -> Objects.equals(t, e.getValue()))
@@ -69,14 +73,14 @@ class HierarchyUtilTest {
);
// 按广度优先寻找 0-2-3
- String target = HierarchyUtil.traverseByBreadthFirst("0", HierarchyIterator.find(parentFinder(),
+ final String target = HierarchyUtil.traverseByBreadthFirst("0", HierarchyIteratorUtil.find(parentFinder(),
t -> Objects.equals(t, "0-2-3") ? t : null
));
Assertions.assertEquals("0-2-3", target);
// 按广度优先获取 0-2 的所有子节点
- List children = HierarchyUtil.traverseByBreadthFirst(
- "0", HierarchyIterator.collect(parentFinder(),
+ final List children = HierarchyUtil.traverseByBreadthFirst(
+ "0", HierarchyIteratorUtil.collect(parentFinder(),
t -> Objects.equals(tree.get(t), "0-2") ? t : null
)
);
@@ -87,8 +91,8 @@ class HierarchyUtilTest {
@Test
void testTraverseByDepthFirst() {
// 按深度优先遍历所有节点
- Set nodes = new LinkedHashSet<>();
- HierarchyUtil.traverseByDepthFirst("0", HierarchyIterator.scan(t -> {
+ final Set nodes = new LinkedHashSet<>();
+ HierarchyUtil.traverseByDepthFirst("0", HierarchyIteratorUtil.scan(t -> {
nodes.add(t);
return tree.entrySet().stream()
.filter(e -> Objects.equals(t, e.getValue()))
@@ -102,14 +106,14 @@ class HierarchyUtilTest {
);
// 按深度优先寻找 0-2-3
- String target = HierarchyUtil.traverseByDepthFirst("0", HierarchyIterator.find(parentFinder(),
+ final String target = HierarchyUtil.traverseByDepthFirst("0", HierarchyIteratorUtil.find(parentFinder(),
t -> Objects.equals(t, "0-2-3") ? t : null
));
Assertions.assertEquals("0-2-3", target);
// 按深度优先获取 0-2 的所有子节点
- List children = HierarchyUtil.traverseByDepthFirst(
- "0", HierarchyIterator.collect(parentFinder(),
+ final List children = HierarchyUtil.traverseByDepthFirst(
+ "0", HierarchyIteratorUtil.collect(parentFinder(),
t -> Objects.equals(tree.get(t), "0-2") ? t : null
)
);