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 fc422d118de53f5f3a04411f97c5f82d244b8f0d..f7e276936b799c13b57abd0f565c72b1d15a2f01 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.ListUtil; +import cn.hutool.core.collection.CollectionUtil; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -18,28 +18,28 @@ import java.util.function.Function; */ public class TreeUtils { - public static List buildTree(List nodes, + public static List buildTree(Collection nodes, Function keyExtractor, Function parentKeyExtractor, - BiConsumer> childrenSetter, + BiConsumer> childrenSetter, @Nullable K parentId) { return buildTree(nodes, keyExtractor, parentKeyExtractor, Function.identity(), childrenSetter, parentId); } - public static List buildTree(List nodes, + public static List buildTree(Collection nodes, Function keyExtractor, Function parentKeyExtractor, Function childMapper, - BiConsumer> childrenSetter, + BiConsumer> childrenSetter, @Nullable K parentId) { return buildTree(nodes, keyExtractor, parentKeyExtractor, childMapper, childrenSetter, null, parentId); } - public static List buildTree(List nodes, + public static List buildTree(Collection nodes, Function keyExtractor, Function parentKeyExtractor, Function childMapper, - BiConsumer> childrenSetter, + BiConsumer> childrenSetter, @Nullable Comparator childrenComparator, @Nullable K parentId) { if (CollectionUtils.isEmpty(nodes)) { @@ -54,10 +54,10 @@ public class TreeUtils { return doBuildTree(keyExtractor, childrenSetter, childMapper, parentWithSubNodes, childrenComparator, parentId); } - public static List getParents(E id, List nodeList, Function keyMapper, Function parentMapper, boolean includeSelf) { + public static List getParents(E id, Collection nodes, Function keyMapper, Function parentMapper, boolean includeSelf) { // toMap 不允许 value 为空,当 parentId 为空时,单独处理下 - Map parentMap = Maps.newHashMapWithExpectedSize(nodeList.size()); - for (T node : nodeList) { + Map parentMap = Maps.newHashMapWithExpectedSize(nodes.size()); + for (T node : nodes) { parentMap.put(keyMapper.apply(node), parentMapper.apply(node)); } return getParents(id, parentMap, includeSelf); @@ -74,7 +74,7 @@ public class TreeUtils { return getParents(id, parentMap, parentIds); } - public static List buildNodeList(List tree, Function> childGetter, Function mapper) { + public static List buildNodeList(Collection tree, Function> childGetter, Function mapper) { List nodes = new ArrayList<>(); if (CollectionUtils.isEmpty(tree)) { return nodes; @@ -83,7 +83,7 @@ public class TreeUtils { return nodes; } - private static void doBuildNodeList(List tree, Function> childGetter, Function mapper, List nodes) { + private static void doBuildNodeList(Collection tree, Function> childGetter, Function mapper, List nodes) { tree.forEach(node -> { nodes.add(mapper.apply(node)); doBuildNodeList(childGetter.apply(node), childGetter, mapper, nodes); @@ -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) { - List subNodes = parentWithSubNodes.remove(parentId); + Collection subNodes = parentWithSubNodes.remove(parentId); List treeList = StreamUtils.toList(subNodes, subNode -> { E child = childMapper.apply(subNode); - List children = doBuildTree(keyExtractor, childrenSetter, childMapper, parentWithSubNodes, childrenComparator, keyExtractor.apply(subNode)); + Collection 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(List dataList, Comparator comparator) { - if (comparator != null) { - ListUtil.sort(dataList, Comparator.nullsLast(comparator)); + private static void sort(Collection data, Comparator comparator) { + if (comparator != null && CollectionUtils.isNotEmpty(data)) { + CollectionUtil.sort(data, comparator); } }