Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法。

(1)不可变Map
特点:

api不太丰富

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,只能写入一次值,其后只读

var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化构造函数
a += ("k3"->3)//添加元素
a += ("k4"->4)//添加元素
a += ("k1"->100)//已经存在添加元素会覆盖
a -= ("k2","k1")//删除元素
// a("k1") = "foo"//不支持
println(a.contains("k6"))//是否包含某元素
println(a.size)//打印大小
println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值
a.foreach{case (e,i) => println(e,i)} //遍历打印1
for( (k,v)<-a ) println(k,v) //遍历打印2
println(a.isEmpty)//判断是否为空
a.keys.foreach(println)//只打印key
a.values.foreach(println)//只打印value
a=Map()//数据清空使用再次new
println(a.size)
a.toSeq.sortBy(_._1)//升序排序 key
a.toSeq.sortBy(_._2)//升序排序 value
a.toSeq.sortWith(_._1>_._1) //降序排序 key
a.toSeq.sortWith(_._2>_._2) //降序排序 value

//下面自定义按英文字母或数字排序
implicit val KeyOrdering=new Ordering[String] {
override def compare(x: String, y: String): Int = {
x.compareTo(y)
}
}
println(a.toSeq.sorted)
(2)可变Map例子
特点:

api丰富与Java中Map基本类似

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,支持读写

def map3(): Unit ={
//不可变Map+var关键词修饰例子
var a:scala.collection.mutable.Map[String,Int]=scala.collection.mutable.Map("k1"->1,"k2"->2)//初始化构造函数
a += ("k3"->3)//添加元素
a += ("k4"->4)//添加元素
a += ("k1"->100)//已经存在添加元素会覆盖
a += ("k1"->100,"k9"->9)//添加多个元素
a -= ("k2","k1")//删除元素
a ++= List("CA" -> 23, "CO" -> 25)//追加集合
a --= List("AL", "AZ")//删除集合

a.retain((k,v)=> k=="k1")//只保留等于k1元素,其他的删除
a.put("put1",200)//put
a.remove("k2")//remove
a.clear()//清空
a("k3")=100//支持

println(a.contains("k6"))//是否包含某元素
println(a.size)//打印大小
println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值
a.foreach{case (e,i) => println(e,i)} //遍历打印1
for( (k,v)<-a ) println(k,v) //遍历打印2
println(a.isEmpty)//判断是否为空
a.keys.foreach(println)//只打印key
a.values.foreach(println)//只打印value
a=scala.collection.mutable.Map()//引用能变
println(a.size)
a.toSeq.sortBy(_._1)//排序 key
a.toSeq.sortBy(_._2)//排序 value
a.toSeq.sortWith(_._1>_._1) //降序排序 key
a.toSeq.sortWith(_._2>_._2) //降序排序 value

//下面自定义按英文字母或数字排序
implicit val KeyOrdering=new Ordering[String] {
override def compare(x: String, y: String): Int = {
x.compareTo(y)
}
}
println(a.toSeq.sorted)

Scala中的Map使用例子的更多相关文章

  1. Scala中的Map集合

    1. Map集合 1.1 Scala中的Map介绍 Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的M ...

  2. Scala中的Map

    映射 映射是对偶的集合. 声明映射 映射是对偶的集合. a.声明映射 b.映射中的键值对称作对偶,用( , )表示 c.当映射中不存在key时,取值会报错,解决方案是使用 contains方法,或者g ...

  3. scala中获取Map中key和value的方法

    val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8) // 获取所有的key v ...

  4. (转)scala中map与flatMap浅析

    在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合.由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好 ...

  5. scala中Map和Set

    scala中Set包含可变set和不可变Set,set的子类HashSet,各有一个扩展了可变和不可变的set特质.  可变set import scala.collection.mutable.Se ...

  6. Scala 中的foreach和map方法比较

    Scala中的集合对象都有foreach和map两个方法.两个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法.而两者的差异在于:foreach无返回值(准确说返回void),map返 ...

  7. Scala 中使用 akka system 的 scheduler 的例子

    这是在scala控制台直接执行的例子.   import akka.actor._ import scala.concurrent.duration._ import scala.concurrent ...

  8. scala中Map集合的简单使用

    import scala.collection.mutable /** * Map集合的简单使用 */ object MapUse { def main(args: Array[String]): U ...

  9. Scala中apply的用法

    Scala中的 apply 方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd Edition Every fun ...

随机推荐

  1. java关于集合的遍历与增强for循环(foreach)的使用

     java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合.      许多情况需要我们遍历出集合 ...

  2. FPGA的GTP(aurora 协议)高速串行接口数据收发(转)

    reference:https://blog.csdn.net/qq_40261818/article/details/83039829 PG046-Aurora 8B/10B  Logicore I ...

  3. 1080 MOOC期终成绩

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  4. DevExpress v18.1新版亮点——Analytics Dashboard篇(二)

    用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Analytics Dashboard v18.1 的新功能,快 ...

  5. matlab运行中出现“Caught "std::exception" Exception message is: Message Catalog MATLAB:builtins was not loaded from the file."

    在我运行过程中,经常爆出这一不确定是什么的问题,经排查后发现,原来是fopen 文件后,没有及时fclose导致的.

  6. 四则运算 来源:一位热心的网友 http://www.tqcto.com/article/software/336297.html

    功能:实现真分数的四则运算 语言:Java  平台:JDK下的eclipse github地址:https://github.com/yeershao/hello-world/commit/9920a ...

  7. iOS 获取当前正在显示的ViewController

    //获取当前屏幕显示的viewcontroller - (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWin ...

  8. 利用itext生成pdf的简单例子

    一.itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  9. 2019-03-08-day007-深浅拷贝

    01 昨日内容回顾 is 两者之间的id是否相同 == 两边的数值是否相等 id 获取该对象的内存地址 代码块: 一个文件,交互式命令行:一行是个一个代码块. 同一代码块下: 字符串的缓存机制,驻留机 ...

  10. Spring+Tomcat的JNDI数据源连接池简单配置

    使用Tomcat JNDI数据源与Spring一起使用步骤如下: 1.将数据库驱动复制到Tomcat的lib文件夹下面 2.配置Tomcat的server.xml配置文件,在GlobalNamingR ...