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

Posted just1t的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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进行遍历。

以上是关于关于java stream流中的peek方法和foreach的自我理解:的主要内容,如果未能解决你的问题,请参考以下文章

Stream map 与 peek

stream api 流式编程

JAVA07_Stream流中FindFirst方法查找元素第一个

JAVA07_Stream流中FindFirst方法查找元素第一个

JAVA07_Stream流中FindFirst方法查找元素第一个

java如何直接从流中读取excel的文件内容?Stream