我正在将使用ReactiveMongo的应用程序与遗留应用程序集成。
因此,我必须在某一时刻维护遗留应用程序接口,我必须阻止和/或将代码转换为指定的接口类型。我把这段代码浓缩到下面的例子中。
有比getChunks更好的方法来使用所有的枚举数,输出类型是一个列表吗?标准的做法是什么?
implicit def legacyAdapter[TInput,TResult]
(block: Future[Enumerator[TInput]])
(implicit translator : (TInput => TResult),
executionContext:ExecutionContext,
timeOut : Duration): List[TResult] = {
val iter = Iteratee.getChunks[TResult]
val exhaustFuture = block.flatMap{
enumy => { enumy.map(i => translator(i) ).run(iter) }
}
val r = Await.result(exhaustFuture , timeOut)
r
}发布于 2014-08-13 18:19:44
我们发现公开http://reactivemongo.org/releases/0.10/api/index.html#reactivemongo.api.Cursor的收集方法比收集枚举器的块具有更高的性能。所以在某种意义上,我们通过改变问题来解决我们的问题。
这确实意味着对我们的数据层进行API更改,但是性能的改进允许这样做。
发布于 2014-08-12 20:30:16
Iteratee.getChunks是通过使用枚举器的所有功能构建列表的唯一实用工具,当然,您可以使用Iteratee.fold做同样的事情,但是您将像Iteratee.getChunks使用Iteratee.fold那样重新发明轮子。
https://stackoverflow.com/questions/25251310
复制相似问题