Interleave枚举器播放2.0

时间:2012-12-04 14:27:33

标签: playframework playframework-2.0 enumerators

尝试在播放2.0.4上了解枚举器 - 我想将一个枚举器与另一个枚举器交错,但只有第一个枚举器的长度(独占)。 所以:

Enumerator("hello", "world") -> "hello" ", " "world"
Enumerator("one", "two", "three") -> "one" ", " "two" ", " "three"

内置交错包括在第一个枚举器的末尾之后,直到第二个枚举器结束。

val commas : Enumerator[String] = {
  Enumerator(", ", ", ", ", ")
}
val words : Enumerator[String] = {
  Enumerator("hello", "world!")
}
Ok.stream(words interleave commas andThen Enumerator.eof)

产生“hello,world,”而不是“hello,world”

非常感谢!

1 个答案:

答案 0 :(得分:0)

Enumerators通常在被消费之前被处理,所以在你的场景中,结果是预期的,因为一个枚举器被完成后,另一个的剩余部分被处理。

您似乎需要一个Iteratee来处理输出并相应地过滤。您可以在documentation中找到一些示例。

另一种可能的方法是使用Enumeratee(参见documentation)来转换交错的输出。