2017-07-04 48 views
1
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)。这里有什么问题?斯卡拉不同的输出逻辑上相同的程序

回答

4

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只能进行一次迭代。