質問

の違いは何ですか、 mapflatMap 機能 Iterable?

役に立ちましたか?

解決

ここではかなり良い説明があります

のhttp:// WWW。 codecommit.com/blog/scala/scala-collections-for-the-easily-bored-part-2する

例として、リストを使用します:

地図の署名があります:

map [B](f : (A) => B) : List[B]

とflatMapのは

flatMap [B](f : (A) => Iterable[B]) : List[B]

はflatMapは[A]の種類を取り、反復可能タイプ[B]を返し、マップは[A]の種類を取り、型を返すので、[B]

これはまた、あなたのリストを「フラット化」しますflatmapアイデアを与えるだろう。

val l  = List(List(1,2,3), List(2,3,4))

println(l.map(_.toString)) // changes type from list to string
// prints List(List(1, 2, 3), List(2, 3, 4))

println(l.flatMap(x => x)) // "changes" type list to iterable
// prints List(1, 2, 3, 2, 3, 4)

他のヒント

上記のすべての真のですが、便利である1つの以上の事があります:flatMapが削除List[Option[A]]にドリルダウン任意のList[A]、と、OptionNoneをオンに。これはnullを使用して超えて取得するための重要な概念画期的な製品です。

から scaladoc:

  • 地図

のlistを返しますよ からの適用指定された関数fへ 各要素をこのlist.

  • flatMap

適用され、指定された関数f 各要素をこのlistし concatenates。

lines.map(line => line split "\\W+") // will return a list of arrays of words
lines.flatMap(line => line split "\\W+") // will return a list of words

あなたは内包のためにこれをよりよく見ることができます:

for {line <- lines
     word <- line split "\\W+"}
yield word.length

これはに変換します

lines.flatMap(line => line.split("\\W+").map(word => word.length))

のための内部の各反復子は、「マップ」に変換されます、最後の1、除いて、「flatMap」に変換されます。この方法では、代わりに、ネストされたコレクション(何とか、何とか、何とかのバッファの配列のリスト)を返す、あなたはフラットなコレクションを返します。 yield'edされる要素によって形成されたコレクション - この場合の整数のリスト、

はこちらを参照してください:http://www.codecommit.com/blog/scala/scala-collections-for-the-easily-bored-part-2

"検索flatMap"が本当に良い説明があります。(基本的に組み合わせた"カーブを平坦化"と"地図"--特徴からその他の言語).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top