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)
}
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
本文将详细介绍Scala中Map的各种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def++(xs:Map[(A,B)]):Map[A,B]` 该方法用于合并两个Map。如果两个Map中有相同的键,则当前Map中的值会覆盖参数Map中...
下面是一个使用 map 和 flatMap 的示例代码: ```scala object collection_t1 { def flatMap1(): Unit = { val li = List(1,2,3) val res = li.flatMap(x => x match { case 3 => List('a','b') case _ => ...
在Scala中,集合操作通常通过方法调用来实现,但也可以使用一些特殊的符号作为操作符。下面列举了一些常用的集合操作符: 1. **`++++`**: 此操作符用于将两个`GenTraversableOnce`类型的集合连接在一起,形成一个新...
在"Scala程序设计 例子 源代码"这个标题中,我们可以推测出这份资料可能来自一本关于Scala编程的书籍,可能包含了大量的示例代码,用于解释和演示Scala的各种概念和技术。这些例子可能是按章节或主题组织的,帮助...
5. **集合库**(可能在`ch09`):Scala的集合库是其强大之处,包含各种高效、功能丰富的集合类型,如List、Set、Map,以及操作这些集合的方法。 6. **隐式转换**(如`ch20`和`ch21`):这是Scala中的一个高级特性,...
在“scala例子”中,我们将深入探讨Scala的基础语法、特性以及如何通过实例来学习和理解这个语言。 Scala的核心特性包括: 1. 面向对象编程:Scala是完全支持面向对象的,它允许我们定义类、对象和接口。类可以...
在《Atomic Scala》中,作者通过一系列的小型、原子性的例子,逐步引导读者探索Scala的世界。这些例子涵盖了从基本语法到高级特性的广泛主题,包括但不限于: 1. **基础语法**:如变量声明、数据类型(包括基本类型...
通过"Scala编程例子"的学习,初学者可以逐步了解并掌握这些概念,从而在实践中运用Scala的强大功能。压缩包中的"examples"可能包含各种示例代码,涵盖以上提到的知识点,帮助学习者加深理解和应用。
另外,Scala有丰富的集合API,这些集合支持丰富的函数式操作,如map、filter和reduce,它们使数据处理变得简单且易于理解。 Scala的类型系统非常强大。它采用了静态类型,每个值都有其特定的类型,这在编译时就能...
在WordCount示例中,通过并行化map和reduce操作,可以显著提高大规模数据的处理速度。 6. 文件I/O操作: 要读取和写入文件,我们需要使用Scala的`Source`类或者Java的`FileInputStream`、`BufferedReader`等。在这...
在WordCount示例中,Spark读取HDFS上的数据,通过SparkContext创建RDD(弹性分布式数据集),然后在RDD上执行map操作,将每个单词分离出来,再通过reduceByKey操作聚合每个单词的计数。 4. **Maven**: Maven帮助...
本书不仅介绍了Scala的基本语法,还深入探讨了面向对象编程、函数式编程等高级主题,并通过具体的示例帮助读者理解Scala的强大功能。无论是对于希望快速上手Scala的新手,还是想要更深入探索Scala特性的高级用户,这...
- **互操作性**: 学习如何在Scala项目中使用Java类库和工具。 #### Actor和并发 - **并发模型**: 探索Scala中的Actor模型及其在并发编程中的作用。 #### 组合子解析 - **解析技术**: 学习如何使用组合子解析器来...
Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种高效、灵活且可扩展的编程环境。...通过仔细研读并实践书中的例子,你将能够熟练掌握Scala,并能将其应用于各种复杂项目中。
这个"Scala案例"可能包含了各种使用Scala编程的实际示例,旨在帮助学习者深入理解其语法、特性和实际应用。以下是关于Scala的一些核心知识点: 1. **基本语法**:Scala的语法简洁而富有表达力。例如,类定义、对象...
在这个"scala学习-project.zip"中,"scalaxuexi"可能包含了练习题、代码示例、教程或者一个小型项目,旨在帮助学习者通过实际操作掌握以上所述的Scala编程知识。通过解压并逐步研究这些文件,学习者可以加深对Scala...
在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List[A]` 此方法用于向列表的末尾...
在这个学习文件中,你将找到关于Scala语言的详细解释,包括语法、概念、最佳实践和示例代码。无论是初学者还是经验丰富的开发者,这个资料都能提供深入的理解和实用的指导。对于希望掌握Scala的人来说,这个资源无疑...
3. **互操作性**:Scala与Java有着良好的互操作性,可以在Scala代码中调用Java类库,反之亦然,这大大扩展了Scala的应用范围。 4. **信任程序员**:Scala赋予开发者强大的控制权,允许他们编写高效的代码,同时也...