无法让 println 在 Grouped Integer Range 映射函数中工作

Unable to get println working in Grouped Integer Range map function

我正在试验以下代码:

def TestRun(n: Int): Unit = {
      (1 to n)
        .grouped(4)
        .map(grp => { println("Group length is: " + grp.length)})
    }

TestRun(100)

令我有点惊讶的是,在执行程序后我无法看到 println 的任何输出。代码编译成功 运行,但没有任何预期输出。

请指出我在做什么错误。

没有输出的原因是 Range 给出了一个 Iterator,它是 lazy。这意味着在被询问之前它不会创建任何数据。同样,groupedmap 方法也是 return 惰性 Iterator,因此结果是 Iterator 将 return 一组值 只在被问到的时候TestRun 从不请求数据,因此永远不会生成。

一种解决方法是使用 foreach 而不是 map,因为 foreacheager([=30= 相反]lazy) 并将依次从 Iterator 中获取每个值。

另一种方法是使用 toList:

之类的东西强制 Iterator 成为一个具体的集合
def TestRun(n: Int): Unit = {
  (1 to n)
    .grouped(4)
    .map(grp => { println("Group length is: " + grp.length)})
    .toList
}

TestRun(100)