oct*_*pus 4 java java-8 java-stream
有什么区别
stream.map().limit(5).terminalOperation()
Run Code Online (Sandbox Code Playgroud)
这条线
stream.limit(5).map().terminalOperation()
Run Code Online (Sandbox Code Playgroud)
这两行将返回相同的结果,但哪一行更优化,不会消耗更多的时间和资源?为什么?以及在每种情况下调用地图的次数?
在每种情况下调用地图的次数是多少?
答案取决于终端操作,而不是map
和和的顺序limit
.
终端操作可能只消耗一个元素(findFirst()
)或所有元素(collect()
).
无论哪种方式,终端操作都规定了map
执行的元素的数量,在两种情况下都应该相同.
例如,如果将元素收集到a List
,假设Stream
源至少有5个元素,map
则每个管道将执行5次.
您可以通过向步骤添加println
语句来验证map
:
List<String> list = Arrays.asList ("a","b","c","d","e","f");
list.stream().map(l->{System.out.println ("map1 " + l);return l +"44";}).limit(5).collect(Collectors.toList());
list.stream().limit(5).map(l->{System.out.println ("map2 " + l);return l +"44";}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这将输出:
map1 a
map1 b
map1 c
map1 d
map1 e
map2 a
map2 b
map2 c
map2 d
map2 e
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,map
都不会为第6个元素执行.
至于更喜欢哪种变体,我假设它们的运行时间相似,但这取决于实际的实现.
归档时间: |
|
查看次数: |
63 次 |
最近记录: |