关于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进行遍历。

posted @ 2023-03-18 11:32  just1t  阅读(564)  评论(0编辑  收藏  举报