マップマッピング:これはセットの一般的な変換操作であり、指定された関数を介してセット内の各要素を新しい結果セットにマップします。
マップマッピングを使用して実際の問題を解決する方法を見てみましょう。
names1 = List( "Tony"、 "Tom"、 "Mary")のすべての名前を大文字に変更し、結果を新しいセットに入れて返します。つまり、新しいList(TONY、TOM、MARY)を返します。
object mapExer01 {
def main(args: Array[String]): Unit = {
//利用map映射将list1中的所有元素装换为大写
val names1 = List("Tony","Tom","Mary","Jack")
val names2 = names1.map(upperString)
println(names2)
}
def upperString(s: String): String ={
s.toUpperCase()
}
}
結果は次のとおりです。List(TONY、TOM、MARY、JACK)
マップマッピングプロセスに関するいくつかの説明を次に示します。
- mapは高階関数であり、関数を受け取ることができます(scalaの関数はパラメーターとしても使用できます)
- ここではメソッドを渡しますが、関数に変換されます
- マップの操作を通じて、新しいコレクション名を返します2
- 最下層はnames1のすべての要素をトラバースし、それをupperStringに渡し、upperStringの結果を新しいコレクションにカプセル化して返します。
- names1コレクション自体は変更されていません
flatMapマッピング:マップマッピングの拡張です。flatMapでは、関数を渡します。各入力の関数は(要素ではなく)コレクションを返し、最後にフラット化されたすべての最終セットを新しいコレクションにフラットマップします。
たとえば、次の例の元の結果は、List( 'T'、 'O'、 'N'、 'Y')、List( 'T'、 'O'、 'M')...、および最後にflatMapがList(T、O、N、Y、T、O、M、M、A、R、Y、J、A、C、K)にフラット化されました
object mapExer02 {
def main(args: Array[String]): Unit = {
/*
flatmap映射:flat即压扁,压平,扁平化映射 即相当于将集合中的每一个元素都当作为一个新的集合,再次打散进行相应的操作
*/
val names1 = List("Tony","Tom","Mary","Jack")
val names2 = names1.flatMap(upperString) //这里注意names1中的每个元素(字符串)也是一个集合
println(names2)
}
def upperString(s: String): String ={
s.toUpperCase()
}
}
結果是:リスト(T、O、N、Y、T、O、M、M、A、R、Y、J、A、C、K)