树形排序-TreeMap或者递归

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.

你可能感兴趣的:(java,java)