val xs: Stream[Int] = Seq(1,2,3).map(_ + 1)(collection.breakOut) toFogeしなくても戻りの型に合わせてくれて、処理効率が良いというものです。 もちろんStreamじゃなくてもVectorでもなんでも使えますし、mapじゃくてもCanBuildFromを使っている関数だったら使えます。 順番にコードを追いながら説明してみます。 まずはmapを 見てみます。 def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = { def builder = { val b = bf(repr) b.sizeHint(this) b } val b = builder for (x <- this) b += f(x) b.result }