我有一个如下功能:
extends Neo4jRepository<ActionResponse, ActionResponse.getId() >
我想调用这个函数,同时将结果减少到一个包含所有页面的集合。
这样的事情:
def getPage(page: Int): List[Object]
我怎么能实现这个目标?
答案 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))
}
由于这是一个微不足道的展开,只是递增一个值,from
和Stream
api上的Iterator
方法会很好(感谢@Dima)
Iterator.from(0).map(getPage).takeWhile(_.nonEmpty)