关于java8 vcTerms.stream().map中的return问题

37 篇文章 0 订阅

1,关于下面这段代码:

 @Override
    public List<TermTimeInfoVo> queryByCourseId(Long courseId) {
        VcTerm vcTerm=new VcTerm();
        vcTerm.setIsDelete(Contants.UN_DELETE_FLAG);
        vcTerm.setCourseId(courseId);
        List<VcTerm> vcTerms = vcTermMapper.select(vcTerm);
        if (CollectionUtils.isNotEmpty(vcTerms)){
            **return** vcTerms.stream().map(x -> {
                //根据期次id查询自由选课默认班级信息
                ClassVo classVo = classMapper.queryClassInfoByTermId(x.getId());
                TermTimeInfoVo termTimeInfoVo = new TermTimeInfoVo();
                termTimeInfoVo.setEndTime(x.getEndTime().getTime());
                termTimeInfoVo.setStartTime(x.getStartTime().getTime());
                termTimeInfoVo.setTermName(x.getTermName());
                termTimeInfoVo.setTermId(x.getId());
                if (classVo != null){
                    termTimeInfoVo.setClassId(classVo.getClassId());
                }
                return termTimeInfoVo;
            }).collect(Collectors.toList());
        }
        return null;
    }

2,关于这个问题:当这段代码中没有写加粗的return的时候,明明termTimeInfoVo里面有值,那为什么这个接口还是返回为null?
回答:list.stream().map中的return像continue的作用一样,只是结束当前循环。所以这段代码经过 return termTimeInfoVo;,完成这个循环后,还会执行到 return null这个代码,所以接口返回null。

怎么解决呢?
在这段代码加上以上加粗的return就可以了,就返回的是这个循环的list中的返回结果list,也正好对应这个接口的返回类型 List。这样就不会执行下面的return null代码了,接口返回也有结果了。

3,关于list.stream().map是啥意思?
看这个网址的解读:https://blog.csdn.net/shine_guo_star/article/details/94383319
或者看自己的收藏夹–《学习》里面这个文章

在list.stream().map(),如果没有显示地指return语句,那么默认会将每个元素转换后的结果作为新的Stream的元素。但是,由于map操作只是进行映射转换,并不会对原始Stream的元素进行修改,所以返回的是一个新的Stream,并没有改变原始Stream的元素。所以在这种情况下,返回值是null。要解决这个问题,你可以在map操作后添加一个终止操作,例如collect(Collectors.toList()),这样就会将转换后的结果收集到一个List并返回。这样,你就能获得转换后的结果,而不是null。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [list.stream().的操作](https://blog.csdn.net/qq_45443879/article/details/122586707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [关于java8 vcTerms.stream().mapreturn问题](https://blog.csdn.net/weixin_43228497/article/details/112619855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值