猿问

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

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

喵喵时光机

不知道具体场景,给一个中立写法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

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

相关分类

JavaScript
我要回答