【问题标题】:Bulk Processing with Java Stream [closed]使用 Java Stream 进行批量处理 [关闭]
【发布时间】:2021-12-26 06:46:38
【问题描述】:

我对 Stream 有一个定义,例如:“它们是数据源的包装器,允许我们使用该数据源进行操作,并使批量处理方便快捷。”

有人可以举个例子,简单解释一下它是如何工作的,这样 Stream 可以“方便快捷地进行批量处理”吗?

谢谢!

【问题讨论】:

  • 没有必要使用 Streams 来做到这一点。
  • 所以你是说 - 使用流并不比读取整个文件并一次返回数据更有效?
  • 考虑为什么 Java IO 包将它的许多类称为“流”,BufferedInputStream。除了流集合类之外,还有不同的东西遵循流模式。
  • 不,我是说你不需要使用 Stream 来处理块中的文件。
  • 你熟悉Iterators吗?它们也是“允许您对其进行操作的数据源的包装器”。流......实际上并没有那么不同。

标签: java spring java-stream


【解决方案1】:
Files.newBufferedReader("/tmp/foo").lines().map(...)...collect(...);
// or
BufferedReader reader = Files.newBufferedReader("/tmp/foo");
Stream<String> stream = reader.lines();
Collection<String> result = stream.map(...)...collect(...);

是一种使用 Stream 处理文本文件的便捷方式。

但使其快速/高效的工作由BufferedReader 完成,而不是Stream

【讨论】:

  • 该代码中的流在哪里?我在 API 中看到:BufferedReader 从字符输入流中读取文本,缓冲字符,以便高效读取字符、数组和行。 - 定义中的“流”是什么意思?
  • 我已经破坏了声明。
  • 是的,它们完全一样。
  • 谁负责提高效率值得商榷;引擎盖下涉及许多不同的组件。事实上,BufferedReader 是它不快速和高效的原因,至少在参考实现中是这样。强烈建议改用 Files.lines(…),从 Java 9 开始,您可能会获得更高效的结果(尤其是在使用并行流时)。
  • @don 也许this article 可以帮助你
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 2016-12-27
相关资源
最近更新 更多