Java Stream API 递归解决方案

本文展示了如何使用Java Stream API进行递归查询,以获取YlQuestion实体类中父节点及其所有子菜单的列表。通过过滤、映射和收集操作,将数据转换为所需结构。代码中定义了`questionList`方法,它首先查询数据,然后递归地通过`getChildren`方法获取每个父节点的所有子菜单。这是一个高效的方法来组织和展示层级数据。
摘要由CSDN通过智能技术生成

Java Stream API 递归解决方案:

提示:话不多说直接上代码!

	// YlQuestion 为实体类
	 @Override
    public List<YlQuestion> questionList() {
    // 查询数据
        List<YlQuestion> ylQuestions = ylQuestionMapper.selectYlQuestionList(new YlQuestion());
        // 过滤父节点
        List<YlQuestion> results = ylQuestions.stream().filter((ylQuestion) -> {		
            return ylQuestion.getParentId() == 0;
        }).map((menu) -> {
        	// menu为父节点数据,ylQuestions为所有数据 ,(getChildren)方法进行筛选
            menu.setChildren(getChildren(menu, ylQuestions));
            return menu;
        }).collect(Collectors.toList());//将结果转化为数组
        return results;
    }

    //递归查找所有菜单的子菜单
    private List<YlQuestion> getChildren(YlQuestion menu, List<YlQuestion> ylQuestions) {
        List<YlQuestion> children = ylQuestions.stream().filter((entity) -> {
            return entity.getParentId().equals(menu.getId());
        }).map((entity) -> {
            //继续递归找子菜单
            entity.setChildren(getChildren(entity, ylQuestions)); //继续调用本方法,递归往下找
            return entity;
        }).collect(Collectors.toList());
        return children;
    }

温馨提醒:

希望大家能学以致用,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值