为了账号安全,请及时绑定邮箱和手机立即绑定

请各位大佬指点!用stream还能怎么优化下面代码?

请各位大佬指点!用stream还能怎么优化下面代码?

神不在的星期二 2019-09-25 15:29:50
问题描述用stream还能怎么优化下面代码?问题出现的环境背景及自己尝试过哪些方法相关代码//请把代码文本粘贴到下方(请勿用图片代替代码)ListgoodsIdList=newArrayList();refundOrderVO.getOrderItemList().forEach(refundOrderItem->{orderItemList.forEach(orderItem->{if(Objects.equals(refundOrderItem.getRefundOrderItemNo(),orderItem.getOrderItemNo())){goodsIdList.add(orderItem.getGoodsId());}});});你期待的结果是什么?实际看到的错误信息又是什么?更简的写法
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

不知道具体场景,给一个中立写法
SetrefundOrderItemNosrefundOrderItem.stream()
.map(item->item.getRefundOrderItemNo())
.collect(Collectors.toSet());
ListgoodsIdList=orderItemList.stream()
.filter(item->refundOrderItemNos.contains(item.getOrderItemNo))
.map(item->orderItem.getGoodsId())
.collect(Collectors.toList());
                            
查看完整回答
反对 回复 2019-09-25
?
Qyouu

TA贡献1786条经验 获得超11个赞

按照@_TNT_的写法应该是比较合适的,不过个人只是想提一点,用stream在处理集合的时候,如果你只是想着把以前的for循环改为stream里的forEach,那你还不如不用stream
你得从思想上该改变哈,一个是命令式编程,一个是声明式编程(可能更进一步说是函数式编程)
简单来说,你用声明式编程的语法却干着命令式编程的“勾当”(⊙ˍ⊙)
先在循环外面初始化一个ListgoodsIdList,然后再在循环里找到需要的数据添加进去。。。这就是命令式编程石锤了,并且你使用stream看不到任何比较细力度的“函数”。。。全是一个大代码块。。就是两个大循环,你可以对比哈@_TNT_的写法,就看得出来区别了╮(╯▽╰)╭
                            
查看完整回答
反对 回复 2019-09-25
  • 2 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信