El mapa de Scala en el iterador no produce efectos secundarios

Por qué es eso,

scala> List(1,2,3,4).iterator.map((x: Int) => println(x))

no imprime

1
2
3
4

mientras

List(1,2,3,4).map((x: Int) => println(x))
List(1,2,3,4).foreach((x: Int) => println(x))
List(1,2,3,4).iterator.foreach((x: Int) => println(x))

¿todos hacen?

En otras palabras, ¿por qué es un mapa en un iterador que mapea el tipo T a la Unidad y tiene efectos secundarios que no pueden mostrar esos efectos secundarios?

Editar:

Además, ¿por qué la siguiente invocación de lazyMap en realidad calcula el nuevo iterador (proporciona el nuevo iterador completo) de principio a fin si el iterador es perezoso?

def lazyMap[T, U](coll: Iterable[T], f: T => U) = new Iterable[U] {
  def iterator = coll.iterator map f
}

scala> lazyMap(List(1,2,3,4), (x: Int) => x + 1)
res4: java.lang.Object with Iterable[Int] = (2, 3, 4, 5)

Respuestas a la pregunta(2)

Su respuesta a la pregunta