当前位置: 首页 > 知识库问答 >
问题:

”te”Scala流/迭代器

裴畅
2023-03-14

我有一个顺序数据源,表示为简单迭代器(或流)。数据相当大,不适合内存。此外,源代码可以遍历一次,并且获取成本很高。该源用于一些重过程(黑盒),该过程将迭代器(或流)作为其参数来使用线性数据。好的,很简单。但如果我有两种不同的消费html" target="_blank">程序,我该怎么办??正如我所说的,我不想将输入数据吸入类似列表的集合中。我也可以从一开始就重读源代码两次来完成我的任务,但我不喜欢这样,因为这样做没有效果。如果事实上我需要“tee”(类似于克隆)迭代器(或流)来使用单个一乘两个并行进程,而无需将其缓存到内存集合中。我认为这样的方法应该做回压,或者更确切地说,如果它消耗源流的速度太快,那么应该限制同级流。有效的解决方案可能应该有一些并行的安全队列缓冲区。有人知道如何在Scala上(或使用任何外部流库/框架)进行这样的工作吗?

PS我发现了一个4岁的类似问题:一个上游流喂养多个下游流不同的是,我问如何使用标准的Scala迭代器(或流)或更好的一些现有库来执行它。

共有1个答案

孔深
2023-03-14

您应该查看fs2流。该示例使用常量内存从一个文件中读取数据,然后增量写入另一个文件。下面是如何修改其示例以写入两个文件:

...

io.file.readAll[IO](Paths.get("testdata/fahrenheit.txt"), blockingEC, 4096)
  .through(text.utf8Decode)
  .through(text.lines)
  .filter(s => !s.trim.isEmpty && !s.startsWith("//"))
  .map(line => fahrenheitToCelsius(line.toDouble).toString)
  .intersperse("\n")
  .through(text.utf8Encode)
  .observe(io.file.writeAll(Paths.get("testdata/celsius.txt"), blockingEC))
  .through(io.file.writeAll(Paths.get("testdata/celsius2.txt"), blockingEC))

...
 类似资料:
  • 迭代器不是集合,而是逐个访问集合元素的方法。 iterator it上的两个基本操作是next和hasNext 。 对it.next()调用将返回迭代器的下一个元素并提升迭代器的状态。 您可以使用Iterator的it.hasNext方法找出是否有更多元素要返回。 “逐步”迭代器返回的所有元素的最简单方法是使用while循环。 让我们按照以下示例程序进行操作。 例子 (Example) objec

  • 主要内容:实例,查找最大与最小元素,实例,获取迭代器的长度,实例,Scala Iterator 常用方法Scala 集合 Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。 迭代器 it 的两个基本操作是 next 和 hasNext。 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。 调用 it.hasNext() 用于检测集合中是否还有元素。 让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环: 实例 object T

  • Scala 集合 Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。 迭代器 it 的两个基本操作是 next 和 hasNext。 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。 调用 it.hasNext() 用于检测集合中是否还有元素。 让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环: object Test

  • null 一些示例输出数据: *编辑:工作的scala代码行:

  • TE

    TE请求报头指定传输编码的用户代理是愿意接受。(你可以非正式地称它Accept-Transfer-Encoding,这会更直观)。 有关Transfer-Encoding传输编码的更多详细信息,另请参阅响应头。请注意,chunkedHTTP / 1.1 收件人始终可以接受,而您不必"chunked"使用TE标头指定。但是,对于设置客户端是否正在使用“预告片”值接受分块传输编码中的预告片字段很有用。

  • 我一直在玩Java新的和闪亮的功能部分,最让我困惑的事情之一是流? 它们有什么用? 在谷歌上,我主要找到了如何使用它们的解释和实际例子,我已经记下来了,没有关于幕后魔法的具体内容,这是我感兴趣的。 我的意思并不是说,从实际意义上讲,我从一些函数语言中找到了map/filter/reduce/etc。相当快,但为什么我们需要先转换为流?Java已经有了迭代器。流和迭代器之间是否有根本的区别,比如一个