Scala map на итераторе не дает побочных эффектов

Почему это так,

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

не распечатывает

1
2
3
4

в то время как

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))

все делают?

Другими словами, почему карта на итераторе, которая отображает тип T на Unit и имеет побочные эффекты, не может показать эти побочные эффекты?

Редактировать:

Кроме того, почему следующий вызов lazyMap фактически вычисляет новый итератор (предоставляет полный новый итератор) от начала до конца, если итератор ленив?

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)

Ответы на вопрос(2)

Ваш ответ на вопрос