首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流peek()方法行为

流peek()方法行为
EN

Stack Overflow用户
提问于 2019-04-08 04:26:43
回答 2查看 168关注 0票数 2
代码语言:javascript
复制
List<Integer> nums = Arrays.asList(1,2,3,4,5,6);
long result = nums
        .stream()
        .peek(System.out::print)
        .map(n->n*n)
        .filter(n->n>20)
        .peek(System.out::print)
        .count();
System.out.println(result);     

为什么不应该打印12345625362而不是1234525362

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 04:37:33

如果我们在peek的println中添加空格,我们可以更好地理解为什么会发生这种情况:

代码语言:javascript
复制
long result2 = nums.stream()
                   .peek(e -> System.out.print(e + " "))
                   .map(n->n*n)
                   .filter(n->n>20)
                   .peek(e -> System.out.print(e + " "))
                   .count();

这将输出以下内容:

代码语言:javascript
复制
1 2 3 4 5 25 6 36 

正如您所看到的,1通过,被打印出来,没有通过过滤器,因此正方形不被打印。234也是如此。然后通过5,并打印出来。它通过了过滤器,所以打印25。到目前为止,我们有:

代码语言:javascript
复制
1 2 3 4 5 25

然后六次以类似的方式通过,我们剩下

代码语言:javascript
复制
1 2 3 4 5 25 6 36 

然后打印System.out.println(result);。由于最后一个调用是对print而不是对println的调用,因此它被打印在同一行上,因此附加了一个2。如果我们去掉空格,就会得到:

代码语言:javascript
复制
12345256362

这就是结果

票数 5
EN

Stack Overflow用户

发布于 2019-04-08 04:34:38

所有流操作首先应用于1,首先是peek / print,然后是map,然后是filter,删除元素。同样的事情发生在2,3和4上。之后的输出是1 2 3 4

然后对于5,我们peek / print,然后是mapfilter,让元素保持机智,然后是peek / print平方数。输出5 25

6也是这样。输出:6 36

All All 1234 525 636 -> 1234525636 (All All All636->1234525636)

然后是count的最终2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55563372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档