非并行流是否意味着在大量数据上进行大规模操作?

Eld*_*ros 5 java java-8 java-stream

几个星期前,我正在寻找一种从文件中提取某些特定值的方法,并偶然发现了这个问题,这个问题将我引入了StreamObject.

我的第一反应是调查此对象将与其他文件操作,如相应的,我使用的值替换占位符几个帮助BufferedReaderFileWriter.我在制作任何工作代码方面都失败了,但从那以后我开始对涉及这个主题的文章感兴趣,所以我能理解它的用途Stream.

在路上,我偶然发现Optional并对它有了很好的理解,现在可以确定我习惯使用的情况,Optional同时保持我的代码清洁和易懂.但是,我不能说这是事实Stream,没有提到它可能没有提供我想象它会带来的性能增益,并且在涉及IO的情况下仍然需要一个finally条款.

这是我一直试图解决的主要问题,请记住我到目前为止主要从事单线程编程:何时优先使用Stream并行处理?

是在大量数据的特定子集上批量执行操作,Collection在尝试访问和操作所述集合的特定对象时会使用哪些操作?虽然它似乎是预期用途,但我仍然不确定我在问题开头链接的示例是您的典型用例.

或者它只是一个用于使代码更小的构造,这要归功于牺牲可读性时的lambda表达式?(如果使用得当,没有什么可以反对lambda,但是Stream我看到的大多数使用示例都非常难以理解,这对我的一般理解没有帮助)

Adi*_*l B 2

我总是参考Java 8 Streams API 页面上的描述来帮助我在 aCollection和 a之间做出决定Stream

然而,[Streams API] 有很多好处。首先,Streams API 利用惰性和短路等多种技术来优化数据处理查询。

aStream和 aCollection都可用于在存储数据集之前对数据集的每个元素进行计算。但是,我发现Streams如果我的管道针对每个数据元素包含多个不同的过滤/排序/映射操作,那么很有用,因为 Stream API 可以在幕后优化这些计算,并且还内置了并行化支持。

我同意使用 a 会对可读性产生积极和消极的影响Stream- 你是对的,有些Stream例子完全不可读,而且我不认为可读性应该是使用 aStream而不是其他东西的关键决策点。

如果您确实要优化大型数据集的性能,请考虑使用专为大型数据集构建的工具集。