首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个并发集合,它不会从Stream : Java中加载内存中的数据

创建一个并发集合,它不会从Stream : Java中加载内存中的数据
EN

Stack Overflow用户
提问于 2017-01-12 10:59:47
回答 1查看 136关注 0票数 0

我需要将每一行从一个大文件发送到Java,Iterator,Iterable。从这个集合、迭代器等,一个现有的框架将数据加载到一个处理系统中。但是,需要向这个框架发送一个并发集合、迭代器等,这是我面临的困难。

我有一个java.util.stream,这是我从一个大文件中得到的。文件中有许多行,我想将所有行传递到一个java 并发java.lang.IterableConcurrent java.util.Iterator或不将所有记录存储在内存中的Concurrent java.util.Collection中,这样我就不会得到像OutOfMemory之类的异常。

  • 我能够从java获得一个Iterator实现,但它不是并发

。任何关于如何使用或不使用Stream的并发实现的想法都将受到极大的赞赏。

EN

回答 1

Stack Overflow用户

发布于 2017-01-12 19:17:16

不存在“并发迭代者”这样的东西。

虽然存在并发集合,但是为它们创建的Iterator是弱一致的(它描述了它们关于底层Collection更新的行为),并且一个Iterator实例一次只能由一个线程使用。

由于来自通过Iterator创建的StreamCollection没有可以更新的底层Collection,并且不支持remove()操作,所以它不能表现出任何与为并发集合创建的Iterator的行为相矛盾的行为,这显然是框架所期望的。嗯,除了它不支持remove操作之外,我觉得这不是您想要的操作的问题。

因此,如果框架为您提供了将Iterator传递给它的选项,则可以使用它传递通过Stream.iterator()创建的Iterator。只要Stream没有任何一个有状态的中间操作( sortdistinct ),它就会表现出想要的懒惰行为。

最值得注意的是,它永远不会抛出一个ConcurrentModificationException

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41611422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档