mirror of https://gitee.com/stylefeng/roses
【8.3.3】优化树节点排序的功能
parent
9141248472
commit
b7714ba53a
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue