【8.3.3】优化树节点排序的功能

master^2
stylefeng 2024-12-11 15:29:10 +08:00
parent 9141248472
commit b7714ba53a
1 changed files with 15 additions and 11 deletions

View File

@ -28,9 +28,12 @@ import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractSortedTreeNode;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
*
@ -54,22 +57,14 @@ public class SortedTreeBuildFactory<T extends AbstractSortedTreeNode<T>> extends
public List<T> doTreeBuild(List<T> nodes) {
// 先对列表进行排序
nodes.sort(Comparator.comparing(AbstractSortedTreeNode::getSort));
nodes.sort(Comparator.comparing(m -> Optional.ofNullable((m).getSort()).orElse(new BigDecimal(Integer.MAX_VALUE))));
// 将每个节点构造一个子树
for (T treeNode : nodes) {
this.buildChildNodes(nodes, treeNode, new ArrayList<>());
}
// 只保留上级是根节点的节点,也就是只留下所有一级节点
ArrayList<T> results = new ArrayList<>();
for (T node : nodes) {
if (node.getNodeParentId().equals(getRootParentId())) {
results.add(node);
}
}
return results;
return findTops(nodes);
}
@Override
@ -81,7 +76,7 @@ public class SortedTreeBuildFactory<T extends AbstractSortedTreeNode<T>> extends
List<T> nodeSubLists = getSubChildsLevelOne(totalNodes, node);
// 对子节点进行排序
nodeSubLists.sort(Comparator.comparing(AbstractSortedTreeNode::getSort));
nodeSubLists.sort(Comparator.comparing(m -> Optional.ofNullable((m).getSort()).orElse(new BigDecimal(Integer.MAX_VALUE))));
if (!nodeSubLists.isEmpty()) {
for (T nodeSubList : nodeSubLists) {
@ -93,4 +88,13 @@ public class SortedTreeBuildFactory<T extends AbstractSortedTreeNode<T>> extends
node.setChildrenNodes(childNodeLists);
}
private List<T> findTops(List<T> nodes) {
List<T> parents = nodes.stream().filter((a) -> null != a.getNodeParentId()).collect(Collectors.toList());
List<String> entityIds = nodes.stream().map(AbstractSortedTreeNode::getNodeId).collect(Collectors.toList());
return parents.stream().filter((a) -> !entityIds.contains(a.getNodeParentId())).distinct().collect(Collectors.toList());
}
}