min*_*ing 12 java lambda java-8 java-stream
这是一个例子:代码A:
files.forEach(f -> {
//TODO
});
Run Code Online (Sandbox Code Playgroud)
和另一个代码B可以这样使用:
files.stream().forEach(f -> { });
Run Code Online (Sandbox Code Playgroud)
两者之间有什么区别,有stream()没有stream()?
Stu*_*rks 22
实际上,它们大多是相同的,但存在一个小的语义差异.
代码A由定义Iterable.forEach,而代码B由定义Stream.forEach.Stream.forEach允许以任何顺序处理元素的定义- 即使对于顺序流也是如此.(对于并行流,Stream.forEach很可能会无序处理元素.)
Iterable.forEach从源获取Iterator并调用forEachRemaining()它.据我所知,Stream.forEach集合类的所有当前(JDK 8)实现都将创建一个源自其中一个迭代器的Spliterator,然后将调用forEachRemaining该迭代器 - 就像Iterable.forEach那样.所以他们做同样的事情,虽然流版本有一些额外的设置开销.
但是,在将来,流实现可能会发生变化,因此不再是这种情况.
(如果要保证处理流元素的排序,请forEachOrdered()改用.)
| 归档时间: |
|
| 查看次数: |
12021 次 |
| 最近记录: |