Scala中的映射map

2023-10-27

1.定义:

 

映射是一系列 键值对的容器

map中的Key是唯一的

 

 

 

 

 

分为可变map和 不可变map

可变集合:scala.collection.mutable.map

不可变集合:scala.collection.immutable.map

默认使用 不可变集合, 使用可变map需要先导入 可变包 scala.collection.mutable.map

import scala.collection.mutable.map

val map2 = scala.collection.mutable.Map("name"->"zhangsan","gender"-> 2)
map2 +=("age" -> 12)   //use += add elements

map2.foreach(println(_))

 

2.声明map

 

val map1 = Map("name" -> "zhangsan", "age" -> "10")
map1.foreach(println(_))

输出:

 

 

3.获取map元素

 

3.1使用key获取value

eg:
val map1 = Map("name" -> "zhangsan", "age" -> "10")
println(map1("name"))

输出:

 

ps:如果key 不存在会报错, 所以可以先判断下 key是否存在

 

val map1 = Map("name" -> "zhangsan", "age" -> "10")
println(map1("gender"))

 

不确定key是否存在,需要先判断

查看 Map 中是否存在指定的 Key

eg: 
val map1 = Map("name" -> "zhangsan", "age" -> "10")

println(if(map1.contains("gender")) map1("gender") else 0 )

 

输出:

 

 

3.2获取所有的keys

eg:

/*get all keys*/
val map1 = Map("name" -> "zhangsan", "age" -> "10")
println(map1.keys)

ps: 返回的是set集合

输出:

 

 

3.3 获取所有的values

eg:

val map2 = Map("name" -> "zhangsan", "age" -> "10")
println(map2.values)

输出:

 

3.4 检查map是否为空

eg:

/*isEmpty*/
val map1 = Map("name" -> "zhangsan", "age" -> "10")
println(map1.isEmpty)

输出:

 

3.5两个map的合并

 

使用  ++  合并

 

eg:

val map2 =Map("name" -> "hangman2", "age" -> "10","gender"->1)
val map3 = Map("name" -> "zhangsan3", "age" -> "10")
val map4 = map2 ++ map3
map4.foreach(println(_))

输出:

 

ps:  如果key重复,++ 后者会替换掉 前边的key 对应的value

 

3.6 获取map中所有的keys 和  values

eg:

val map2 =Map("name" -> "hangman2", "age" -> "10","gender"->1)
map2.keys.foreach(i => {

  print("key is ", i)
  println("value is ", map2(i))
  
})

输出:

 

 

eg2:

val map2 =Map("name" -> "hangman2", "age" -> "10","gender"->1)
map2.keys.foreach(i =>{

  if(i.equals("name")){
    println("这里是 name 的value ",map2(i))
  }else{print("key is ",i)
    println("value is ",map2(i))
  }}

)

输出:

 

3.6 exists 判断集合中指定条件的元素是否存在

 

eg:

/*exists*/
val map2 =Map("name" -> "hangman2", "age" -> "10","gender"->1)
println(map2.exists(x => x._1 == "age" && x._2 == "10") )  //judge the key and the key's value  equals a special thing

 

输出:

 

3.7  filter 返回满足指定条件的所有集合

def filter(p: ((A, B))=> Boolean): Map[A, B]

返回满足指定条件的所有集合

eg:

val map2 = Map("name" -> "hangman2", "age" -> "10","gender"->1)
println(map2.filter(x => x._1 == "name"))

输出:

 

ps: 如果过滤掉 key为空的元素,用nonEmpty

val resultMap2 = resultMap1.filter(x  => x._1.nonEmpty)

如果获取key为 空, 用isEmpty

val resultMap2 = resultMap1.filter(x  => x._1.isEmpty)

 

3.8 遍历

val map1 = Map("zs"->"张三","ls"->"李四","ww"->"王五")
/*1*/
map1 foreach (x=>println(x._1,x._2))

/*2*/
map1 foreach {x => x match {
  case (k,v) => {println(k,v)}
}}

/*3*/
map1 foreach {
  case (k, v) => {
    println(k, v)
  }
}

输出:

3.9 排序

从小到大

val resultMap3 = resultMap2.toList.sortBy(_._2)

从大到小

val resultMap3 = resultMap2.toList.sortBy(-_._2)  

 

对map的操作: 

https://blog.csdn.net/hzp666/article/details/116481796

序号 方法及描述
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 的默认方法

9

def clear(): Unit

清空 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

返回字符串对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala中的映射map 的相关文章

  • 用惯用的 Scala 更新大型数据结构

    我已经尝试 Scala 一段时间了 并且经常遇到支持不可变数据结构的建议 但是当你有一个像这样的数据结构时3D 场景图 大型神经网络或任何具有大量需要频繁更新的对象的东西 对场景中的对象进行动画处理 训练神经网络 这似乎是 运行时效率极低
  • Scala REPL 中的递归重载语义 - JVM 语言

    使用 Scala 的命令行 REPL def foo x Int Unit def foo x String Unit println foo 2 gives error type mismatch found Int 2 required
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • IntelliJ IDEA 13:新的 Scala SBT 项目尚未生成 src 目录结构

    我按照 Jetbrains 网站上的入门视频设置 IntelliJ IDEA 13 1 Community Edition 以与 Scala 配合使用 Scala 插件 v0 36 431 已安装 当我使用向导创建一个新的 Scala SB
  • Spark日期格式问题

    我在火花日期格式中观察到奇怪的行为 实际上我需要转换日期yy to yyyy 日期转换后 日期应为 20yy 我尝试过如下 2040年后失败 import org apache spark sql functions val df Seq
  • 如何在 Apache Spark 中通过 DStream 使用特征提取

    我有通过 DStream 从 Kafka 到达的数据 我想进行特征提取以获得一些关键词 我不想等待所有数据的到达 因为它是可能永远不会结束的连续流 所以我希望以块的形式执行提取 如果准确性会受到一点影响 对我来说并不重要 到目前为止 我整理
  • Scala 2.9 无法在 Windows XP 上运行“hello world”示例

    我正在尝试在 Windows XP 上使用 scala 2 9 1 Final 运行 HelloWorld 示例 object HelloWorld extends App println Hello World 文件另存为Hello sc
  • 如何从命令行向 REPL 添加导入?

    如何使 REPL 导入命令行中给出的包 Sample scala someMagicHere import sys error scala gt imports 1 import scala Predef 162 terms 78 are
  • Akka Stream Graph 恢复问题

    我创建了一个图表来并行化具有相同输入的两个流 这些流产生 Future Option Entity 如果 flowA 失败 我想返回 Future None 但恢复似乎没有被调用 val graph Flow Input Future Op
  • Scala 宏的位置怎么了?

    我试图获取宏参数的原始输入字符串 但返回的位置似乎有点偏离 考虑这个宏 例如 object M import scala reflect macros Context import language experimental macros
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Spark SQL 失败,因为“常量池已超过 JVM 限制 0xFFFF”

    我在 EMR 4 6 0 Spark 1 6 1 上运行此代码 val sqlContext SQLContext getOrCreate sc val inputRDD sqlContext read json input try inp
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • 如何使用 Spark 2 屏蔽列?

    我有一些表 我需要屏蔽其中的一些列 要屏蔽的列因表而异 我正在读取这些列application conf file 例如 对于员工表如下所示 id name age address 1 abcd 21 India 2 qazx 42 Ger
  • Spark:如何使用crossJoin

    我有两个数据框 df1有 100000 行并且df2有 10000 行 我想创建一个df3这是两者的交叉连接 val df3 df1 crossJoin df2 这将产生 10 亿行 尝试在本地运行它 但似乎需要很长时间 您认为本地可以实现
  • 如何在映射中将字符串转换为 Seq[String]

    我有一个Map String String 以及需要的第三方功能Map String Seq String 有没有一种简单的方法来转换它 以便我可以将地图传递给函数 original mapValues Seq 注意mapValues返回地
  • IntelliJ:线程“主”java.lang.NoClassDefFoundError中的异常:org/apache/spark/sql/types/DataType

    附言 有一个类似的问题here https stackoverflow com questions 40287289 java lang noclassdeffounderror org apache spark logging 但那是在
  • 在scala 2.13中,为什么有时无法显式调用类型类?

    这是 Shapeless 2 3 3 中的一个简单示例 val book author gt gt Benjamin Pierce title gt gt Types and Programming Languages id gt gt 2
  • 在 Spark 结构化流 2.3.0 中连接两个流时,左外连接不发出空值

    两个流上的左外连接不发出空输出 它只是等待记录添加到另一个流中 使用套接字流来测试这一点 在我们的例子中 我们想要发出具有 null 值的记录 这些记录与 id 不匹配或 且不属于时间范围条件 水印和间隔的详细信息如下 val ds1Map
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean

随机推荐

  • 华为OD机试 - 响应报文时间(Java)

    题目描述 IGMP 协议中 有一个字段称作最大响应时间 Max Response Time HOST收到查询报文 解折出 MaxResponsetime 字段后 需要在 0 MaxResponseTime 时间 s 内选取随机时间回应一个响
  • ADRV9009 项目系统架构——手册介绍

    一 9009介绍 ADRV9009 是一款双通道 RF 发送器和接收器 带有一个观察接收器 工作频率范围为 75 MHz 至 6 GHz 该器件在其发射器上支持高达 450 MHz 的合成带宽 该设备的接收器部分既可以作为支持高达 200
  • 精读-软件测试的艺术之模块测试及更高级别的测试

    本文是关于精读书籍 软件测试的艺术 的一些学习笔记和分享 本书共有九章包括测试思想 心理 经济 代码检查 测试用例设计 模块测试 更高级别的测试 调试 极限测试和因特尔应用系统的测试 本文主要介绍了一些介绍了一些模块测试和一些更高级别的测试
  • mysql/Java服务端对emoji的支持

    前言 最近开发的iOS项目因为需要用户文本的存储 自然就遇到了emoji等表情符号如何被mysql DB支持的问题 困扰了数日 在就要绝望放弃的边缘 终于完成了转换和迁移 在此特别分析和整理 方便更多人 问题描述 如果UTF8字符集且是Ja
  • TensorFlow学习--卷积神经网络CNN

    转载地址 深度学习之卷积神经网络CNN及tensorflow代码实现示例http blog csdn net cxmscb article details 71023576 一 CNN的引入 在人工的全连接神经网络中 每相邻两层之间的每个神
  • echarts使用时重新加载数据之前的数据存留在图上的问题

    echarts在使用折线图的时候遇到一个小问题记录一下 每次跟新数据之前的折线都会保留在图上 是因为echarts默认叠加的 解决办法 加一个true解决 myChart setOption option true
  • C++ 大话设计之《组合模式》(优缺点,设计原理,常用场景)

    组合模式 结构型设计模式 优点 它可以让客户端以统一的方式处理单个对象和组合对象 它可以让你更容易地增加新类型的组件 缺点 它可能使你的设计变得过于通用 有时候 只有叶子组件需要定义某些操作 但是由于通用性 你不得不在所有组件中定义这些操作
  • angular 报错Multiple components match node with tagname app-base-table

    该报错的意思是选择器冲突 也就是说存在两个或更多组件使用了相同的元素选择器 因为只能有一个与特定元素关联的组件 所以选择器必须是唯一的字符串 以防止 Angular 产生歧义 如何排查错误 使用错误消息中给出的元素名称在代码库中全局搜索使用
  • vue项目中基于qrcode.js实现二维码展示

    需求说明 在vue项目中 根据后台返回借助qrcode js动态生成二维码展示在页面上 qrcode js下载地址 http davidshimjs github io qrcodejs 1 vue项目引入qrcode npm instal
  • 电子文档秒变手写文字:这个工具绝了!!

    今天给大家带来了一款比较实用的小软件 它能干什么呢 它能让电子文档 如word文档等等 转换成手写文字图片 软件名字叫手写模拟器 压缩包大小在59MB左右 免费无广告 是个绿色软件 软件启动方法很简单 解压软件压缩包后双击运行其中的 han
  • idea无法启动

    标题idea无法启动不一定是电脑内存的原因 也有可能是因为idea分配的运行空间不足 解决方法如下 调整VM文件最小运行和最大运行参数 修改idea配置文件参数 然后进行重新编译项目就能启动
  • 链改价值节点,构建区块链命运共同体

    区块链是信息革命的拐点 区块链技术的应用使信息时代的内涵从简单的信息复制 信息分享的时代迈入价值转移的时代 因此区块链实际上构建了一种新的网络 即价值互联网 为了创造用户价值 推进区块链产业发展 标准化制定和应用区块链技术来解决企业痛点 链
  • 数字IC后端流程——(二)布局规划Floorplan

    参考博客原址 https blog csdn net weixin 46752319 article details 107313770 ICC布局规划 Floorplan是ICC设计流程中非常重要的一环 Floorplan的好坏直接影响到
  • 跨站脚本攻击(XSS)

    文章目录 渗透测试漏洞原理 1 跨站脚本攻击 1 1 漏洞概述 1 2 XSS漏洞原理 1 2 1 攻击模型 1 3 XSS漏洞危害 1 4 XSS漏洞验证 1 5 XSS漏洞分类 1 5 1 反射型XSS 1 5 2 存储型XSS 1 5
  • 【零基础入门 Nginx】——万字文章通俗易懂

    一 Nginx 简介 1 Nginx 概述 Nginx Engine X 是一个高性能的HTTP和反向代理服务器 特点是占有内存少 并发能力强 同时也提供了IMAP POP3 SMTP服务 nginx可以作为静态页面的web服务器 同时还支
  • vue路由跳转this.$router.push带参数两种方法

    index vue html
  • 2013 一路走过--- 续2

    2013 一路走过 去凤凰古城花光了我所有的钱 回到学校后姐给了我两千 这是我毕业和步入社会的所有资本 鱼的毕业设计 毕业论文都是由我一手包办 所以快毕业答辩的那几天 我一遍又一遍的给她讲毕业设计的一些知识 她很紧张 怕过不了 我笑着安慰她
  • Mac/Linux 安装联邦学习 Fate 框架单机部署所需的依赖(填坑大全)

    安装过程各种坑 官方单机部署教程 然而官方教程问题超多 我在Mac本机与新建的ubuntu18 04 5上分别单机部署 使用standalone fate master 1 4 5 tar gz pycharm2020 1作为编辑器 文章目
  • 第三方博客平台足迹

    第三方博客平台就是我们常说的免费博客 在免费博客发布文章 一般能带上dofollow的链接 是一种常用的外链建设手段 除了著名的blogger com wordpress com等一些大型的第三方博客平台社区可以让我们注册账户发博客 互联网
  • Scala中的映射map

    1 定义 映射是一系列 键值对的容器 map中的Key是唯一的 分为可变map和 不可变map 可变集合 scala collection mutable map 不可变集合 scala collection immutable map 默