如何调试(debug)Stream Pipeline中的操作。
比如下列代码
List <Integer > numbers = Arrays.asList (2, 3, 4, 5 );
numbers.stream ( )
.map (x -> x + 17 )
.filter ( x -> x % 2 == 0 )
.limit (3)
.forEach (System.out::println);
输出结果如下:
20
22
每次调用forEach方法,都会扫描整个stream。
怎么能确认pipeline中的每个操作(map, filter, limit)结果呢?
下面登场的是 stream 的 peek操作。
通过peek,来确认stream pipeline中的每一步操作前后的中间值。
List < Integer > result =
numbers.stream ( )
.peek ( x -> System.out.println (“from stream: “ + x ) )
.map (x -> x + 17 )
.peek ( x -> System.out.println (“after map: “ + x ) )
.filter ( x -> x % 2 == 0 )
.peek (x -> System.out.println (“after filter: “ + x ) )
.limit (3)
.peek ( x -> System.out.println (“after limit: “ + x ) )
.collect(toList());
打印pipeline的每一步操作
from stream: 2
after map: 19
from stream: 3
after map: 20
after filter: 20
after limit: 20
from stream: 4
after map: 21
from steam: 5
after map: 22
after filter: 22
after limit: 22