Scala分页在遗留的java方法上迭代,直到满足条件



在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。

最新更新