关于java stream流中的peek方法和foreach的自我理解:

场景:
我需要在数据库中将信息查出,在将其转化为某一个对象,再将该对象进行添加进入list集合
 
我首先想到的是stream().peek()方法,编写的代码如下:

                productAttrValueService.getListBySpuIdAndAttrId(spuInfo,attrAttrgroupRelationEntity.getAttrId()).stream().peek(productAttrValueEntity -> {
                    SkuItemVo.SpuBaseAttrVo spuBaseAttrVo = new SkuItemVo.SpuBaseAttrVo();
                    spuBaseAttrVo.setAttrName(productAttrValueEntity.getAttrName());
                    spuBaseAttrVo.setAttrValue(productAttrValueEntity.getAttrValue());
                    spuAttrList.add(spuBaseAttrVo);
                    System.out.println("属性为:"+spuBaseAttrVo);
                });

执行的结果为:

 
可以看到,并没有出现在peek中的打印信息(没有属性为:。。。。。。)

 
但是如果使用foreach进行遍历每一项,就会存在打印结果:

 
 
 
 
在查看了相应的资料和博客之后,我对于peek方法和foreach方法的理解是:
peek方法的作用主要是用于改变传入对象的内部信息,如果没有修改就不会执行peek中的代码;
foreach方法是不管你遍历的的目的是什么,都会执行foreach里边的代码。

 
我的推荐是:如果我们在遍历的时候需要存在返回值的情况,就使用stream().map()方法,如果没有返回值,仅仅是需要修改对象内部的信息,就使用stream().peek()方法,其他的都使用foreach进行遍历。

本文作者:just1t

本文链接:https://www.cnblogs.com/just1t/p/17229639.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   just1t  阅读(712)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起