java树形菜单过滤掉父级中断的数据&完全匹配父子级

文章介绍了在前端和后端处理树形菜单时,如何过滤掉父级中断的数据以及实现父子级完全匹配的功能,使用了Hutool库,并给出了Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树形菜单过滤

有两个树形结构的菜单数据小功能有点意思,特地记录一下

(1)过滤掉父级中断的数据

菜单列表数据,本来是,如果勾选了一个子级菜单,那么其所有上层父级菜单也会勾选保存到后台,此数据用户前端页面查询进行渲染成树形菜单,当然也可以后端直接处理成树形菜单(后端处理成树形菜单,那么父级中断的菜单就会直接过滤掉,不需要再处理),但是这个接口是个非树形列表,那么就需要简单过滤下(一般前端组件其实也不会报错,对于这种数据)

(2) 完全匹配父子级每一层

用于一些父子级名称匹配批量导入的功能,需要在导入excel中完整输入父子级,比如数据是 首页-工作台-用户列表,那么用户在excel中输入 首页-工作台1-用户列表或者 首页-用户列表这种不完全匹配的数据就需要过滤掉或业务异常中断提醒,完全匹配是因为数据库存的是id唯一,名称是可以跨级重复的,对于用户来说,他们只知道名称。

实操:

pom依赖

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-core</artifactId>
    </dependency>

(1)过滤中断

List<MenuDto> menuList = new ArrayList<>();
List<MenuDto> finalDtoList = menuList ;
menuList.stream().filter(p -> p.getPid().equals(0) || finalDtoList.stream()
                    .allMatch(parent -> parent.getPid().equals(p.getId())))
                    .collect(Collectors.toList());

(2)完全匹配

/**
 * 匹配分类,严格从顶级到末级排序
 * @param nameList 分类名称 
 * @param treeList 树形列表
 * @return 末级分类
 */
public static Tree<String> matchCatalog(List<String> nameList, List<Tree<String>> treeList) {
    if (ObjectUtils.isEmpty(nameList) || ObjectUtils.isEmpty(treeList)) {
        return new Tree<>();
    }
    String targetName = nameList.get(0);
    for (Tree<String> node : treeList) {
        if (node.getName().equals(targetName)) {
            if (nameList.size() == 1) {
                return node;
            } else {
                return matchCatalog(nameList.subList(1, nameList.size()), node.getChildren());
            }
        }
    }
    return new Tree<>();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值