问题描述用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());
Qyouu
TA贡献1786条经验 获得超11个赞
按照@_TNT_的写法应该是比较合适的,不过个人只是想提一点,用stream在处理集合的时候,如果你只是想着把以前的for循环改为stream里的forEach,那你还不如不用stream你得从思想上该改变哈,一个是命令式编程,一个是声明式编程(可能更进一步说是函数式编程)简单来说,你用声明式编程的语法却干着命令式编程的“勾当”(⊙ˍ⊙)先在循环外面初始化一个ListgoodsIdList,然后再在循环里找到需要的数据添加进去。。。这就是命令式编程石锤了,并且你使用stream看不到任何比较细力度的“函数”。。。全是一个大代码块。。就是两个大循环,你可以对比哈@_TNT_的写法,就看得出来区别了╮(╯▽╰)╭
添加回答
举报
0/150
提交
取消