Mapa Scala no iterador não produz efeitos colaterais

Por que é isso,

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

não imprime

1
2
3
4

enquanto

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 fazem?

Em outras palavras, por que um mapa em um iterador que mapeia o tipo T para Unit e tem efeitos colaterais incapazes de mostrar esses efeitos colaterais?

Editar:

Além disso, por que a seguinte invocação de lazyMap na verdade calcula o novo iterador (fornece o novo iterador completo) do começo ao fim se o iterador é preguiçoso?

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)