Java将所有节点排成有序树形结构

工作中碰到了将所有节点排成有序树结构的情况,在网上学习了下,找了我认为最简单的,并加上了排序,在此记录一下。
代码亲测可以,只要稍作修改就可以使用:

第一步

首先需要在你的实体类中增加一个字段,来存储子节点。

第二步

加入下面代码,并更换实体类和排序规则

public List<MenuVO> getChildNode(String rootMenu, List<MenuVO> allMenuList) {

        List<MenuVO> childMenu = new ArrayList<>();
        for (MenuVO menu : allMenuList) {
            if (menu.getParentCode().compareTo(rootMenu) == 0) {
                // 递归查询此节点下的所有子节点
                List<MenuVO> childNode = getChildNode(menu.getMenuCode(), allMenuList);
                menu.setChildNode(childNode);
                childMenu.add(menu);
            }
        }
        // 子节点进行排序
        List<MenuVO> childSortMenu = Optional.ofNullable(childMenu)
                .map(List::stream)
                .orElseGet(Stream::empty)
                .sorted(Comparator.comparing(MenuVO::getSeq))
                .collect(Collectors.toList());

        return childSortMenu;
    }

在这里插入图片描述
红框内,你想要按哪个字段进行排序就换成那个字段的get方法。
如不需要排序可以把这一段删掉

第三步

然后在你的方法中调用即可

List<MenuVO> result = getChildNode("0", allMenuList);

第一个参数为你 根节点的父节点id ,第二个参数为 所有的节点

结果如下

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值