无法让 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。这意味着在被询问之前它不会创建任何数据。同样,grouped
和 map
方法也是 return 惰性 Iterator
,因此结果是 Iterator
将 return 一组值 只在被问到的时候。 TestRun
从不请求数据,因此永远不会生成。
一种解决方法是使用 foreach
而不是 map
,因为 foreach
是 eager([=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)
我正在试验以下代码:
def TestRun(n: Int): Unit = {
(1 to n)
.grouped(4)
.map(grp => { println("Group length is: " + grp.length)})
}
TestRun(100)
令我有点惊讶的是,在执行程序后我无法看到 println
的任何输出。代码编译成功 运行,但没有任何预期输出。
请指出我在做什么错误。
没有输出的原因是 Range
给出了一个 Iterator
,它是 lazy。这意味着在被询问之前它不会创建任何数据。同样,grouped
和 map
方法也是 return 惰性 Iterator
,因此结果是 Iterator
将 return 一组值 只在被问到的时候。 TestRun
从不请求数据,因此永远不会生成。
一种解决方法是使用 foreach
而不是 map
,因为 foreach
是 eager([=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)