Scala 分页遍历遗留 java 方法直到满足条件

Scala paging iterating over legacy java method until condition is met

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