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.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
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) {
|
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) {
|
for (T treeNode : nodes) {
|
||||||
this.buildChildNodes(nodes, treeNode, new ArrayList<>());
|
this.buildChildNodes(nodes, treeNode, new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 只保留上级是根节点的节点,也就是只留下所有一级节点
|
return findTops(nodes);
|
||||||
ArrayList<T> results = new ArrayList<>();
|
|
||||||
for (T node : nodes) {
|
|
||||||
if (node.getNodeParentId().equals(getRootParentId())) {
|
|
||||||
results.add(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -81,7 +76,7 @@ public class SortedTreeBuildFactory<T extends AbstractSortedTreeNode<T>> extends
|
||||||
List<T> nodeSubLists = getSubChildsLevelOne(totalNodes, node);
|
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()) {
|
if (!nodeSubLists.isEmpty()) {
|
||||||
for (T nodeSubList : nodeSubLists) {
|
for (T nodeSubList : nodeSubLists) {
|
||||||
|
@ -93,4 +88,13 @@ public class SortedTreeBuildFactory<T extends AbstractSortedTreeNode<T>> extends
|
||||||
node.setChildrenNodes(childNodeLists);
|
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