key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.apply 方法的参数为一个两元素的元组(键值对)。
map 的参数是一个函数,以上示例展示了定义这个函数的两种方法。每个键值对(元组)都将被传入到该函数中。我们可以将其参数定义为一个两元素的元组,
map定义:其中当出现同一个key值的时候,后面的值会将前面的值进行覆盖。使用foreach进行遍历
val map =Map[String,Int]("a"->100,"b"->200,("c",300),("c",400))
根据key返回value值,使用的是一个get,这个时候如果存在对应的值就会返回一个Some类型的值,反之则是一个None,这俩个类型都是Option的子类。最后再.get就会返回对应的基本类型。
map.get("a")
map.get("aa")
map.get("a").get
当对一个不存在的key获取他的值的时候,很显然是会报错的,这个时候可以使用 ,getOrElse()
方法,表示当不存在的时候,返回这个方法里面的东西。
map.get("aa").getOrElse("不存在")
获取所有的key,使用.keys
方法,返回值的类型是一个 Iterable [String]
根据所获取的key值打印出所对应的value值
map.keys.foreach(key => {
println(map.get(key))
})
俩个map映射合并
其中.++
是表示将map1往map里面合并,即map1覆盖map,而原本的.++:
是表示map往map1里面添加,map覆盖map1,但是在这里弹出警告:trait MapOps中的method++:
已弃用(从2.13.0开始):对于Iterable类型的集合,请使用++
而不是++:
方法。
注: 如果一个包含 + 的表达式返回结果类型 String,而这并不是你所期望的结果。这可能是因为编译器认为这是该表达式唯一可行的解析方式,就把 + 两边的子表达式转为字符串,再相加。
可变长的Map,导入对应的Map包,使用put方法进行添加元素
import scala.collection.mutable.Map
val map = Map[String,Int]()
map.put("a",4)
map.put("b",7)
map.foreach(println)
可变长度的map映射的filter过滤,当使用的是命令行的时候,没有换行输入的话,需要家伙少年宫分号进行隔开,在最后可以看到返回值的类型会是一个 scala.collection.mutable.Map[String,Int]
map.filter(tp => {
val key = tp._1
val value = tp._2
value == 4
})
其余的Map方法:如下表所示
序号 | 方法名 | 描述 |
---|---|---|
1 | def ++(xs: Map[(A, B)]): Map[A, B] | 返回一个新的 Map,新的 Map xs 组成 |
2 | def -(elem1: A, elem2: A, elems: A*): Map[A, B] | 返回一个新的 Map, 移除 key 为 elem1, elem2 或其他 elems。 |
3 | def --(xs: GTO[A]): Map[A, B] | 返回一个新的 Map, 移除 xs 对象中对应的 key |
4 | def get(key: A): Option[B] | 返回指定 key 的值 |
5 | def iterator: Iterator[(A, B)] | 创建新的迭代器,并输出 key/value 对 |
6 | def addString(b: StringBuilder): StringBuilder | 将 Map 中的所有元素附加到StringBuilder,可加入分隔符 |
7 | def addString(b: StringBuilder, sep: String): StringBuilder | 将 Map 中的所有元素附加到StringBuilder,可加入分隔符 |
8 | def apply(key: A): B | 返回指定键的值,如果不存在返回 Map 的默认方法 |
10 | def clone(): Map[A, B] | 从一个 Map 复制到另一个 Map |
11 | def contains(key: A): Boolean | 如果 Map 中存在指定 key,返回 true,否则返回 false。 |
12 | def copyToArray(xs: Array[(A, B)]): Unit | 复制集合到数组 |
13 | def count(p: ((A, B)) => Boolean): Int | 计算满足指定条件的集合元素数量 |
14 | def default(key: A): B | 定义 Map 的默认值,在 key 不存在时返回。 |
15 | def drop(n: Int): Map[A, B] | 返回丢弃前n个元素新集合 |
16 | def dropRight(n: Int): Map[A, B] | 返回丢弃最后n个元素新集合 |
17 | def dropWhile(p: ((A, B)) => Boolean): Map[A, B] | 从左向右丢弃元素,直到条件p不成立 |
18 | def empty: Map[A, B] | 返回相同类型的空 Map |
19 | def equals(that: Any): Boolean | 如果两个 Map 相等(key/value 均相等),返回true,否则返回false |
20 | def exists(p: ((A, B)) => Boolean): Boolean | 判断集合中指定条件的元素是否存在 |
21 | def filter(p: ((A, B))=> Boolean): Map[A, B] | 返回满足指定条件的所有集合 |
22 | def filterKeys(p: (A) => Boolean): Map[A, B] | 返回符合指定条件的的不可变 Map |
23 | def find(p: ((A, B)) => Boolean): Option[(A, B)] | 查找集合中满足指定条件的第一个元素 |
24 | def foreach(f: ((A, B)) => Unit): Unit | 将函数应用到集合的所有元素 |
25 | def init: Map[A, B] | 返回所有元素,除了最后一个 |
26 | def isEmpty: Boolean | 检测 Map 是否为空 |
27 | def keys: Iterable[A] | 返回所有的key/p> |
28 | def last: (A, B) | 返回最后一个元素 |
29 | def max: (A, B) | 查找最大元素 |
30 | def min: (A, B) | 查找最小元素 |
31 | def mkString: String | 集合所有元素作为字符串显示 |
32 | def product: (A, B) | 返回集合中数字元素的积。 |
33 | def remove(key: A): Option[B] | 移除指定 key |
34 | def retain(p: (A, B) => Boolean): Map.this.type | 如果符合满足条件的返回 true |
35 | def size: Int | 返回 Map 元素的个数 |
36 | def sum: (A, B) | 返回集合中所有数字元素之和 |
37 | def tail: Map[A, B] | 返回一个集合中除了第一元素之外的其他元素 |
38 | def take(n: Int): Map[A, B] | 返回前 n 个元素 |
39 | def takeRight(n: Int): Map[A, B] | 返回后 n 个元素 |
40 | def takeWhile(p: ((A, B)) => Boolean): Map[A, B] | 返回满足指定条件的元素 |
41 | def toArray: Array[(A, B)] | 集合转数组 |
42 | def toBuffer[B >: A]: Buffer[B] | 返回缓冲区,包含了 Map 的所有元素 |
43 | def toList: List[A] | 返回 List,包含了 Map 的所有元素 |
44 | def toSeq: Seq[A] | 返回 Seq,包含了 Map 的所有元素 |
45 | def toSet: Set[A] | 返回 Set,包含了 Map 的所有元素 |
46 | def toString(): String | 返回字符串对象 |