使用一个枚举器来同时传递给两个迭代器

5
我对play框架、函数式编程和Iteratee I/O都很陌生,所以我的问题可能与主题无关甚至很愚蠢。
我想将大型文本文件作为流上传到第三方,并同时提取有关该文件的元数据(基于其内容,简单地说它是一个csv文件)。
我已经编写了两个工作中的body解析器:Iteratee[Array[Byte], B]包含写入逻辑,Iteratee[Array[Byte], MetaData]则包含元数据提取逻辑。请告诉我如何组合这两个解析器以在同一时间处理写入和提取内容。
1个回答

4
如果你有两个迭代器,比如it1it2,你可以从它们中创建一个“zipped”迭代器(zippedIt),这将把接收到的任何输入都发送给两个迭代器it1it2。请参阅zip的Play Iteratee文档

以下是一个示例:

import play.api.libs.iteratee.{Enumerator, Iteratee, Enumeratee}

val e = Enumerator("1", "2", "3")
val it1 = Iteratee.foreach[String](v => println("1: " + v))
val it2 = Iteratee.foreach[String](v => println("2: " + v))
val zippedIt = Enumeratee.zip(it1, it2)
e(zippedIt)

这个小片段的控制台输出是:
1: 1
2: 1
1: 2
2: 2
1: 3
2: 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接