diff --git a/commons/common-util/src/main/java/com/schbrain/common/util/TreeUtils.java b/commons/common-util/src/main/java/com/schbrain/common/util/TreeUtils.java index 4179774795a008f693b09435244bea55b9b5a424..bf4c9d144e2c7325118b2d28f0bd489fddc4043a 100644 --- a/commons/common-util/src/main/java/com/schbrain/common/util/TreeUtils.java +++ b/commons/common-util/src/main/java/com/schbrain/common/util/TreeUtils.java @@ -1,6 +1,6 @@ package com.schbrain.common.util; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -11,37 +11,37 @@ import java.util.function.BiConsumer; import java.util.function.Function; /** - * Utils to build tree + * Utils for tree * * @author panwangnan * @since 2023/7/29 */ public class TreeUtils { - public static List buildTree(Collection nodes, - Function keyExtractor, - Function parentKeyExtractor, - BiConsumer> childrenSetter, - @Nullable K parentId) { + public static > List buildTree(C nodes, + Function keyExtractor, + Function parentKeyExtractor, + BiConsumer> childrenSetter, + @Nullable K parentId) { return buildTree(nodes, keyExtractor, parentKeyExtractor, Function.identity(), childrenSetter, parentId); } - public static List buildTree(Collection nodes, - Function keyExtractor, - Function parentKeyExtractor, - Function childMapper, - BiConsumer> childrenSetter, - @Nullable K parentId) { + public static > List buildTree(C nodes, + Function keyExtractor, + Function parentKeyExtractor, + Function childMapper, + BiConsumer> childrenSetter, + @Nullable K parentId) { return buildTree(nodes, keyExtractor, parentKeyExtractor, childMapper, childrenSetter, null, parentId); } - public static List buildTree(Collection nodes, - Function keyExtractor, - Function parentKeyExtractor, - Function childMapper, - BiConsumer> childrenSetter, - @Nullable Comparator childrenComparator, - @Nullable K parentId) { + public static > List buildTree(C nodes, + Function keyExtractor, + Function parentKeyExtractor, + Function childMapper, + BiConsumer> childrenSetter, + @Nullable Comparator childrenComparator, + @Nullable K parentId) { if (CollectionUtils.isEmpty(nodes)) { return new ArrayList<>(); } @@ -54,24 +54,24 @@ public class TreeUtils { return doBuildTree(keyExtractor, childrenSetter, childMapper, parentWithSubNodes, childrenComparator, parentId); } - public static List getParents(E id, Collection nodes, Function keyMapper, Function parentMapper, boolean includeSelf) { + public static List getParents(E self, Collection nodes, Function keyMapper, Function parentMapper, boolean includeSelf) { // toMap 不允许 value 为空,当 parentId 为空时,单独处理下 Map parentMap = Maps.newHashMapWithExpectedSize(nodes.size()); for (T node : nodes) { parentMap.put(keyMapper.apply(node), parentMapper.apply(node)); } - return getParents(id, parentMap, includeSelf); + return getParents(self, parentMap, includeSelf); } - public static List getParents(T id, Map parentMap, boolean includeSelf) { + public static List getParents(T self, Map parentMap, boolean includeSelf) { List parentIds = new LinkedList<>(); if (includeSelf) { - parentIds.add(id); + parentIds.add(self); } if (MapUtils.isEmpty(parentMap)) { return parentIds; } - return getParents(id, parentMap, parentIds); + return getParents(self, parentMap, parentIds); } public static List buildNodeList(Collection tree, Function> childGetter, Function mapper) { @@ -90,8 +90,8 @@ public class TreeUtils { }); } - private static List getParents(T id, Map parentMap, List parentIds) { - T parentId = parentMap.get(id); + private static List getParents(T self, Map parentMap, List parentIds) { + T parentId = parentMap.get(self); if (parentId == null) { return parentIds; } @@ -100,15 +100,15 @@ public class TreeUtils { } private static List doBuildTree(Function keyExtractor, - BiConsumer> childrenSetter, + BiConsumer> childrenSetter, Function childMapper, Map> parentWithSubNodes, Comparator childrenComparator, K parentId) { - Collection subNodes = parentWithSubNodes.remove(parentId); + List subNodes = parentWithSubNodes.remove(parentId); List treeList = StreamUtils.toList(subNodes, subNode -> { E child = childMapper.apply(subNode); - Collection children = doBuildTree(keyExtractor, childrenSetter, childMapper, parentWithSubNodes, childrenComparator, keyExtractor.apply(subNode)); + List children = doBuildTree(keyExtractor, childrenSetter, childMapper, parentWithSubNodes, childrenComparator, keyExtractor.apply(subNode)); sort(children, childrenComparator); childrenSetter.accept(child, children); return child; @@ -117,9 +117,9 @@ public class TreeUtils { return treeList; } - private static void sort(Collection data, Comparator comparator) { + private static void sort(List data, Comparator comparator) { if (comparator != null && CollectionUtils.isNotEmpty(data)) { - CollectionUtil.sort(data, comparator); + ListUtil.sort(data, comparator); } }