java - 流 peek() 方法行为
问题描述
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
?
解决方案
如果我们在 println 中添加空格,peek
我们可以更好地了解为什么会发生这种情况:
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();
这输出:
1 2 3 4 5 25 6 36
如您所见1
,通过,打印出来,没有通过过滤器,因此没有打印正方形。2
,3
和也是如此4
。然后5
通过,并被打印。它通过过滤器,因此25
被打印。到目前为止,我们有:
1 2 3 4 5 25
然后六个以类似的方式通过,我们剩下
1 2 3 4 5 25 6 36
然后System.out.println(result);
被打印出来。由于最后一次调用是 toprint
而不是println
它打印在同一行,所以 a2
被附加。如果我们取出空格,则会产生:
12345256362
结果是什么
推荐阅读
- sql - SQL Server - 减轻查询中列包含 NULL 的近乎重复的记录?
- api - 通过 API 将数据从表单添加到数据库
- model - Elm create-elm-app 错误:初始化时赋予 Elm 程序的标志有问题。Json.Decode.oneOf 以下2种方式失败
- java - Kruskal 算法 - 我在这个实现中的问题是什么?
- android - Android Project的状态栏不能变色
- python - matplotlib:如何精确定位文本?
- php - HTML/PHP:移动 Web 导航栏不起作用
- java - 在 Resteasy Reactive / Quarkus 中使用枚举作为查询参数
- python - Python 部署到 Azure 应用服务失败且没有错误
- html - Bootstrap 导航栏右对齐