为Paginated API创建Scala迭代器

pr1*_*001 4 api pagination iterator scala

我正在编写一个Scala库,以便更轻松地查询分页JSON API.每个API调用都返回一个如下所示的对象:

{
  "count": 100,
  "current_page": 1,
  "total_pages": 2,
  "records": [
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想有一个函数返回某种迭代器,如MyIterator [Record].在Scala世界中是否有任何标准方法可以做到这一点,甚至可能在标准库中构建可以帮助我的方法?

我通常使用lift-json进行JSON解析,如果这有用的话.

谢谢.

Dav*_*low 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)
Run Code Online (Sandbox Code Playgroud)

结合Iterator 伴侣对象上的一个工厂方法,您可以将其转换为单行:

Iterator.range(1, pageCount).map(i: Int => fetchPage(i)).flatten
Run Code Online (Sandbox Code Playgroud)

如果您只能通过检索页面来获取页数,则可能需要更复杂一些......例如:

val (firstPage, pageCount) = getFirstPageWithCount()
firstPage ++ (Iterator.range(2, pageCount).map(fetchPage).flatten)
Run Code Online (Sandbox Code Playgroud)