我正在读一条流,我正在寻找某个时间间隔内的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) )
感谢任何帮助。
答案 0 :(得分:1)
你不需要可变列表(避免使用可变结构,除非你有必要的真正原因)。假设pg.pins
是Stream
并且数据按日期排序(您的问题似乎暗示了这一点),这样的事情应该做你想做的事情:
val (after, before) = pg.pins.flatten
.takeWhile { js => (js \ "createdAt").as[Date].before(end) }
.partition { js => (js \ "createdAt").as[Date].after(start) }