man*_*aug 2 java java-8 java-stream
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);
Run Code Online (Sandbox Code Playgroud)
为什么不打印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();
Run Code Online (Sandbox Code Playgroud)
输出:
1 2 3 4 5 25 6 36
Run Code Online (Sandbox Code Playgroud)
如您所见1,打印出来了,没有通过过滤器,因此正方形没有被打印出来。同样是真正的2,3和4。然后5经过并打印。它通过过滤器,因此25被打印。到目前为止,我们有:
1 2 3 4 5 25
Run Code Online (Sandbox Code Playgroud)
然后以类似的方式经过六个,我们剩下
1 2 3 4 5 25 6 36
Run Code Online (Sandbox Code Playgroud)
然后System.out.println(result);被打印。由于最后一次调用是to,print而不是最后一次调用被println打印在同一行上,因此2附加了a 。如果我们取出空格,将产生:
12345256362
Run Code Online (Sandbox Code Playgroud)
结果是什么
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |