1TreeMap
TreeMap来实现树形结构的排序。TreeMap是一个有序的key-value集合,它是通过红黑树实现的。TreeMap默认按照key的升序排序,如果您想要按照每个层级的创建时间排序,您可以将每个节点的创建时间作为key,然后将节点作为value存储在TreeMap中。
TreeMap的keySet()方法获取到一个有序的key集合,然后遍历这个集合来获取到有序的节点列表
public class Node {
private String name;
private Date createTime;
private List<Node> children;
// 省略getter和setter方法
public static void main(String[] args) {
// 创建一个TreeMap
Map<Date, List<Node>> map = new TreeMap<>();
// 添加节点到TreeMap中
for (Node node : nodeList) {
Date key = node.getCreateTime();
List<Node> list = map.get(key);
if (list == null) {
list = new ArrayList<>();
map.put(key, list);
}
list.add(node);
}
// 遍历TreeMap的keySet()方法获取到有序的key集合
for (Date key : map.keySet()) {
List<Node> list = map.get(key);
// 对每个层级内部进行排序
Collections.sort(list, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o1.getCreateTime().compareTo(o2.getCreateTime());
}
});
// 处理节点
for (Node node : list) {
System.out.println(node.getName());
}
}
}
}
参考:
(1) java 8 数据树层级关系嵌套自定义排序模糊匹配生成和扁平化_北辰微雨的博客-CSDN博客. https://blog.csdn.net/jsonms/article/details/124106301.
(2) java之TreeUtils生成一切对象树形结构 - 掘金 - 稀土掘金. https://juejin.cn/post/6847902218407018503.
(3) Java树形结构介绍以及Java生成树形结构数据的样例代码_java生成树形结构编码_温水先生的博客-CSDN博客. https://blog.csdn.net/qq_42722951/article/details/107381273.
2Java的递归算法来实现树形结构的排序
public class Node {
private String name;
private Date createTime;
private List<Node> children;
// 省略getter和setter方法
public void sortChildren() {
if (children != null) {
Collections.sort(children, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o1.getCreateTime().compareTo(o2.getCreateTime());
}
});
for (Node child : children) {
child.sortChildren();
}
}
}
public static void main(String[] args) {
// 创建根节点
Node root = new Node();
root.setName("root");
root.setCreateTime(new Date());
// 创建子节点
Node child1 = new Node();
child1.setName("child1");
child1.setCreateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24));
Node child2 = new Node();
child2.setName("child2");
child2.setCreateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 48));
// 添加子节点到根节点
root.setChildren(Arrays.asList(child1, child2));
// 对树形结构进行排序
root.sortChildren();
}
}
在这个示例代码中,我们定义了一个sortChildren()方法,该方法会对当前节点的子节点进行排序,并递归调用每个子节点的sortChildren()方法。这样,我们就可以通过递归算法来实现树形结构的排序。
参考:
(1) JAVA实现树结构List递归遍历_supich的博客-CSDN博客. https://blog.csdn.net/qq_37638959/article/details/105851942.
(2) Java递归实现树结构(包含Java 8 方法)_递归生成树形结构_打更人—的博客-CSDN博客. https://blog.csdn.net/SpringLsL/article/details/119956647.
(3) Java数据结构——树的遍历算法(递归和非递归实现) - 知乎. https://zhuanlan.zhihu.com/p/102460785.