在Scala代码中,我需要在遗留的分页Java端点上循环,直到不再需要调用为止。
天真的伪解决方案-
var data: Seq[Data]
while(data.length < 1000)
// paging.limit is 1000
// getData return List[Data]
var newData = getData(paging.offset, paging.limit).asScala
data = data ++ newData
Scala的方法是什么?
无限次执行任务的一种简单方法是使用LazyList
:
// This generates a list of unknown number of elements (less than 10)
def getData(pageNumber: Int): List[Int] =
List.fill(scala.util.Random.between(1,10))(scala.util.Random.between(1,100))
LazyList
.from(0) // Create infinite LazyList and track the page number
.map(getData)
.flatten //flatten is needed because getData generates a list. You can combine with map and use flatMap.
//If it generates single element, then it is not needed.
.take(1000) //Take number of element from this LazyList. It will not go over that because it is lazy
.toList // Materialize this LazyList
编辑
对于Scala 2.12及更早版本,请使用Stream。