scala基础-map/tuple初印象

来源:互联网 发布:林心如真恶心知乎 编辑:程序博客网 时间:2024/06/09 17:09

1、不可变Map定义

默认情况下map是构造不可变的集合,里面内容不可修改,一旦修改就变成新的map,原有map内容保持不变;
如果想直接new出Map实例,则需要使用HashMap等具体的Map子类;

// 不可变Map    val bigDatas = Map("Spark"->6, "Hadoop"->11)// 调用工厂方法模式apply来构造Map实例,而需要注意的是Map是接口,在apply中使用了具体的实现

同时其实不可变的,不可对其进行增删改。

2、可变Map定义

// 可变Map    val programingLanguage = scala.collection.mutable.Map("scala" -> 13, "java" -> 23)    programingLanguage("scala") = 30    for((name, age) <- programingLanguage) println(name + " = " + age)

输出:

scala = 30java = 23

3、HashMap的使用

3.1HashMap定义

val personsInformation = new scala.collection.mutable.HashMap[String, Int]

3.2 增删操作

// 增加元素personsInformation("Jerry") = 32;personsInformation("Tom") = 12;personsInformation += ("Marry" -> 45, "Chare" -> 11)// 删除元素personsInformation -= ("Marry")for((name, age) <- personsInformation) println(name + " : " + age)

输出:

Jerry : 32Chare : 11Tom : 12

3.3 getOrElse的使用

查询一个Map中的值一定要采用getOrElse的语法(因为如果查询值不在Map中,一方面在key不存在的情况下不报异常,可能会报以下错误:
“java.util.NoSuchElementException: key not found: Bob”;
另外一个神奇的作用就是提供默认值,而关于默认值的提供在实际开发中至关重要,在spark中很多默认值都是通过getOrElse的方式来实现。

// java.util.NoSuchElementException: key not found: Bob// println(personsInformation("Bob"))println(personsInformation.getOrElse("Bob", 23))// 查询Jerry对应的值,没有则打印23,有则打印对应value

输出:

23

3.4 获取key或者value

// 只打印keyfor(key <- personsInformation.keySet) println( key )// 只打印valuefor(value <- personsInformation.values) println( value )

输出:

JerryChareTom321112

3.5 使用yield将key\value倒置

val result = for((key, value) <- personsInformation) yield(value, key)    for((key, value) <- result) println(key + " : " + value)

输出:

32 : Jerry11 : Chare12 : Tom

4、排序的Map(SortedMap)的定义以及使用

使用SortedMap可以得到排序的Map集合。

// 定义一个排序的Mapval persons = scala.collection.immutable.SortedMap("c" -> 3, "a" -> 2, "e" -> 1, "b" -> 99)for((key, value) <- persons) println(key + " : " + value)

输出:

a : 2b : 99c : 3e : 1

5、LinkedHashMap的定义

LinkedHashMap可以记住插入数据的顺序,这在实际开发中非常有用;按照输入的顺序进行输出。

val person2 = scala.collection.mutable.LinkedHashMap("c" -> 3, "a" -> 2, "e" -> 1, "b" -> 9)for((key, value) <- person2) println(key + " : " + value)

输出:

c : 3a : 2e : 1b : 9

6、tuple的定义

1、Tuple中可以有很多不同类型的数据;
2、在企业级实际开发大数据的时候一定会反复的使用Tuple来表达数据结构,以及使用Tuple来处理业务逻辑;
3、Tuple的另外一个非常重要的作用是作为函数的返回值,在Tuple中返回若干个值。

// 定义一个tuple    val personIntroduce = ("Jerry", "male", 23, "FUZHOU", "It's a good boy")    println("My name is " + personIntroduce._1 + ". I'm " + personIntroduce._3 + " years old !")

输出:

My name is Jerry. I'm 23 years old !
原创粉丝点击