斯卡拉不同的输出逻辑上相同的程序
问题描述:
val a = List(1, 2, 3, 4, 5)
val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1)))
//b.foreach(x => println(x))
val r = b.foldLeft((0, 0)) {
case ((m, n), (x, y)) => {
(m + x, n + y)
}
}
println(r)
程序给出了上述程序的正确输出(4,6)。但是当我取消注释上面的foreach语句时,会输出(0,0)。这里有什么问题?斯卡拉不同的输出逻辑上相同的程序
答
val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1)))
,b
的类型是Iterator
:
scala> :type b
Iterator[(Int, Int)]
所以,当您通过b.foreach(x => println(x))
迭代b
,在此之后,当前迭代器b
是空的,因为Iterator
只能进行一次迭代。