jlb*_*jlb 8 java lambda java-8 java-stream
看起来我可以list.forEach(a -> a.stuff())直接在我的收藏中调用,而不是list.stream().forEach(a -> a.stuff()).我何时会使用另一个(parallelStream()旁边......)?
Stu*_*rks 15
有一些差异:
Iterable.forEach如果为Iterable定义,则保证以迭代顺序处理.(对于列表,迭代顺序通常是明确定义的.)Stream.forEach不; 一个人必须Stream.forEachOrdered改用.
Iterable.forEach可能允许对基础数据结构产生副作用.虽然ConcurrentModificationException如果在迭代期间修改了集合,许多集合的迭代器将抛出,但某些集合的迭代器明确允许它.CopyOnWriteArrayList例如,请参阅.相反,流操作通常不得干扰流源.
如果Iterable是一个同步的包装器集合,例如,来自Collections.synchronizedList(),forEach对它的调用将在整个迭代期间保持其锁定.这将阻止其他线程在迭代期间修改集合,从而确保迭代看到集合的一致视图并防止ConcurrentModificationException.(这也会阻止其他线程在迭代期间读取集合.)这不是流的情况.没有什么可以阻止在流操作期间修改集合,如果确实发生了修改,则结果是未定义的.
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |