Создание итератора Scala для разбитого на страницы API - PullRequest
4 голосов
/ 28 января 2011

Я пишу библиотеку Scala, чтобы упростить запросы к разбитому на страницы JSON API.Каждый вызов API возвращает объект, который выглядит примерно так:

{
  "count": 100,
  "current_page": 1,
  "total_pages": 2,
  "records": [
    ...
  ]
}

Я хотел бы иметь функцию, которая возвращает некоторый итератор, такой как MyIterator [Record].Существуют ли какие-либо стандартные способы сделать это в мире Scala, возможно, даже конструкции в стандартной библиотеке, которые могут мне помочь?

Я обычно использую lift-json для анализа JSON, если это полезно.

Спасибо.

1 Ответ

5 голосов
/ 29 января 2011

Если у вас есть Iterator[Iterator[A]], вы можете использовать flatten для получения Iterator[A], который объединяет все вложенные итераторы:

scala> Iterator(Iterator(1, 2), Iterator(3, 4)).flatten.toList
res0: List[Int] = List(1, 2, 3, 4)

В сочетании с одним из заводских методов в сопутствующем объекте Iterator вы, вероятно, можете превратить его в однострочник:

Iterator.range(1, pageCount).map(i: Int => fetchPage(i)).flatten

Возможно, это будет немного сложнее, если вы можете получить количество страниц только путем извлечения страницы ... что-то вроде:

val (firstPage, pageCount) = getFirstPageWithCount()
firstPage ++ (Iterator.range(2, pageCount).map(fetchPage).flatten)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...