减少分页查询

时间:2017-10-03 18:55:52

标签: scala

我有一个如下功能:

extends Neo4jRepository<ActionResponse, ActionResponse.getId() >

我想调用这个函数,同时将结果减少到一个包含所有页面的集合。

这样的事情:

def getPage(page: Int): List[Object]

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:0)

您没有减少结构,而是创建一个结构,此功能称为unfold。不幸的是unfold不在std lib中,但是编写和包含你自己很容易。

一个简单的展开fn看起来像:

def unfoldRight[A, B](seed: B)(f: B => Option[(A, B)]): Stream[A] =
  f(seed) match {
    case Some((a, b)) => a #:: unfoldRight(b)(f)
    case None => Stream.empty[A]
  }

你会像这样使用它:

unfoldRight(0) { i =>
  val page = getPage(i)
  if (page.isEmpty) None
  else Some((page, i + 1))
}

由于这是一个微不足道的展开,只是递增一个值,fromStream api上的Iterator方法会很好(感谢@Dima)

Iterator.from(0).map(getPage).takeWhile(_.nonEmpty)