阅读scala流,直到标准来来去去

时间:2016-06-16 15:39:32

标签: java scala stream

我正在读一条流,我正在寻找某个时间间隔内的json值。在时间间隔的值之前和期间读取任何内容,我想要缓存。一旦流读取了时间间隔内的所有值(假设按时间顺序),我应该停止阅读。

此处的代码将所有值缓存在可变列表中,然后过滤到日期范围内的json。但是一旦过滤器完成,它就不会停止读取,它会缓存流中的所有内容。

val cache: MutableList[JsValue] = MutableList.empty

pg.pins.flatten
  .map( record => {cache += record; record})
  .filter( js => ( js \ "created_at").as[Date].after(start) && ( js \ "created_at").as[Date].before(end) )

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你不需要可变列表(避免使用可变结构,除非你有必要的真正原因)。假设pg.pinsStream并且数据按日期排序(您的问题似乎暗示了这一点),这样的事情应该做你想做的事情:

 val (after, before) = pg.pins.flatten
   .takeWhile { js => (js \ "createdAt").as[Date].before(end) }
   .partition { js => (js \ "createdAt").as[Date].after(start) }