我正在编写一个Scala库,以便更轻松地查询分页JSON API。每个API调用都返回一个如下所示的对象:
{
"count": 100,
"current_page": 1,
"total_pages": 2,
"records": [
...
]
}
我想要一个返回某种迭代器的函数,比如MyIterator [Record]。在Scala世界中是否有任何标准方法可以做到这一点,甚至可能在标准库中构建可以帮助我的方法?
我通常使用lift-json进行JSON解析,如果这有用的话。
感谢。
答案 0 :(得分:5)
如果您有Iterator[Iterator[A]]
,则可以使用flatten
生成Iterator[A]
,将所有嵌套的迭代器链接在一起:
scala> Iterator(Iterator(1, 2), Iterator(3, 4)).flatten.toList
res0: List[Int] = List(1, 2, 3, 4)
结合迭代器companion object上的一种工厂方法,您可以将其转换为单行:
Iterator.range(1, pageCount).map(i: Int => fetchPage(i)).flatten
如果您只能通过检索页面来获取页数,则可能需要更复杂一些......例如:
val (firstPage, pageCount) = getFirstPageWithCount()
firstPage ++ (Iterator.range(2, pageCount).map(fetchPage).flatten)