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. 读书笔记 C# 接口中的索引器之浅析

    在C#中,可以在类.结构或接口中用this关键字声明索引器,在索引器内部用get或set访问器访问类中集合的某项值.因此可以将索引器看作是类的属性一样去定义.索引器常用定义格式如下: public i ...

  2. STM32之RTC配置与初始化

    void rtc_init() { //让电源和后备寄存器使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE) ...

  3. LVS原理详解(3种工作方式8种调度算法)

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...

  4. js常用到的方法积累

    //获取对象长度的方法 function countObjLen(obj) { var count = 0; for (var property in obj) { if (Object.protot ...

  5. 性能测试-8.LR常用函数

    1.变量转参数 lr_save_string("参数内容","param"):将字符串“aaa”或者一个字符串变量,转变成LR的参数{param} 2.参数转变 ...

  6. MySQL的架构与历史

    MySQL的最主要特性是它的存储引擎架构,这种架构设计将查询处理以及其他系统任务和数据的存储/提取相分离. MySQL最上层服务是一些如连接处理,授权认证,安全等. MySQL的核心服务功能大部分度在 ...

  7. 推荐系统-07-lambda架构

    Lambda 架构 Lambda 架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错.低延迟.可扩展等.其整合离线计算与实时计算,融合不 ...

  8. YII2.0使用ActiveForm表单(转)

    Controller控制器层代码 <?php namespace frontend\controllers; use frontend\models\UserForm; class UserCo ...

  9. Oval框架如何校验枚举类型的一种思路

    前言: Oval校验框架被广泛集成于各类接口参数校验中, 其方便的注解语法, 易读性和扩展性. 几乎成了java后端服务代码的标配. 有人会很疑惑, 都已经是枚举类型了, 还需要校验吗? 其实这边更确 ...

  10. Filter过滤器介绍

    简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...