1. Scala映射(Map)是一组键/值对的对象。
任何值都可以根据键来进行检索。键在映射中是唯一的,但值不一定是唯一的。映射也称为哈希表。映射有两种,不可变的和可变的。可变对象和不可变对象之间的区别在于,当对象不可变时,对象本身无法更改。
默认情况下,Scala使用不可变映射(Map)。如果要使用可变集合(Set),则必须明确导入scala.collection.mutable.Map类。如果想同时使用可变的和不可变映射(Map),那么可以继续引用不可变映射(Map),但是可以将mutable集合引用mutable.Map。
scala> import scala.collection.mutable.Map import scala.collection.mutable.Map
scala> var map = Map(1 -> "a", 2 -> "b", 3 -> "c")
map: scala.collection.mutable.MapInt,String] = Map(2 -> b, 1 -> a, 3 -> c)
scala> println(map.keys)
Set(2, 1, 3)
scala> println(map.values)
HashMap(b, a, c)
scala> println(map.isEmpty)
false
scala> map += (4 -> "d")
res12: scala.collection.mutable.MapInt,String] = Map(2 -> b, 4 -> d, 1 -> a, 3 -> c)
scala> map.foreach(value => print(value + " "))
(2,b) (4,d) (1,a) (3,c)
scala>
var map1 = Map(1 -> "a", 2 -> "b", 3 -> "c")
map1.getOrElse("c#",-1)
取值,取不到返回-1
转成映射(key-value)类型
元组转映射:
val arr = Array(("tom",1),("jerry",2),("dog",3))
arr.toMap
元组:
val t = ("scala",3.14,100L,("spark",1))
取spark:t._4._1
拉链:
val arr1 = Array(tom,jerry,dog)
val arr2 = Array(1,2,3)
arr1 zip arr2
或者arr1.zip(arr2)
2. 将函数映射到集合
任何一种函数式语言中,都有map函数与faltMap这两个函数
map函数的用法,顾名思义,将一个函数传入map中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。
而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat这一步。
scala> val nums=List(1,2,3,4)
nums: ListInt] = List(1, 2, 3, 4)
scala> nums.map(x=>2+x)
res24: ListInt] = List(3, 4, 5, 6)
scala> nums.map(_+1)
res25: ListInt] = List(2, 3, 4, 5)
scala> val data = List("Hadoop","Java","Spark")
data: ListString] = List(Hadoop, Java, Spark)
scala> println(data.flatMap(_.toList))
List(H, a, d, o, o, p, J, a, v, a, S, p, a, r, k)
scala的集合有3大类:Seq(序列)、Set(集合)、Map(映射)
序列:
scala> val list1 = List(1,2,3)
scala> list1.append(4)
集合:
scala> import scala.collection.mutable.HashSet
val set1 =new HashSet[Int]()
set1 += 1
或set1.add(1)
set1 ++= Set(4,5,6)
set1.remove(1)
set有去重功能
映射:
scala> import scala.collection.mutable.HashMap
import scala.collection.mutable.HashMap
scala> val map1 = new HashMap[String, Int]()
map1: scala.collection.mutable.HashMap[String,Int] = Map()
scala> map1("scala") = 1
scala> map1
res3: scala.collection.mutable.HashMap[String,Int] = Map(scala -> 1)
scala> map1 += (("java",2),("python",3))
res4: map1.type = Map(scala -> 1, java -> 2, python -> 3)
scala> map1.put("c++",4)
res5: Option[Int] = None
scala> map1
res6: scala.collection.mutable.HashMap[String,Int] = Map(scala -> 1, c++ -> 4, java -> 2, python -> 3)
scala>
删除:
map1 -= "java"
map1.remove("c++")