scala> List(1, 2, 3).flatMap(x => List(x*2)) res8: List[Int] = List(2, 4, 6) scala> List(1, 2, 3).flatMap(x => List("a")) res9: List[String] = List(a, a, a) scala> List(1, 2, 3).flatMap(_ => List("a")) res10: List[String] = List(a, a, a)
flatMap自体はこういう説明。
コレクションの要素を変換する。関数fでAを処理して複数のBを返すと、それらを結合した新しいコレクションが作られる。
Scalaコレクションメソッドメモ(Hishidama's Scala collection method Memo)
Modegramming Style: Scala Tips / flatMapとbind(>>=)の違い
使い方はなんとなくこんな感じ。
flatMapはbind(>>=)とほぼ同じという話まで持ち上がってきており、リストなどから値を取り出して、それを関数に渡すという理解がいまいまのところ。