`
qindongliang1922
  • 浏览: 2151248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116437
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124694
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58648
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70473
社区版块
存档分类
最新评论

Scala中的Map使用例子

阅读更多



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),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
 
 
 
0
0
分享到:
评论

相关推荐

    浅析scala中map与flatMap的区别

    主要介绍了浅析scala中map与flatMap的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Scala 集合数据操作示例

    map[B](f: (A) ? B): List[B] 定义一个变换,把该变换应用到列表的每个元素中,原列表不变,返回一个新的列表数据

    Redis的Scala客户端rediscala.zip

    示例代码: import redis.RedisClient import scala.concurrent.Await import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global object Main extends App { implicit ...

    leetcode下载-puzzle_scala:scala的练习题

    在上面的例子中,两行代码的返回结果其实是一样的,都是 List(2,3,4),而在第一行中的 _叫做占位符,可以让我们的代码更加简洁 但是这并不意味着使用 _ 和箭头函数是同样的结果 val list1:List[Int] = List(1,2,3)....

    persistmap:一个实验性的完全持久化的 Map,它具体化了 Scala 中集合访问的时间

    使用类似于 STM 的乐观写入模型写入“未来”是事务性的(参见下面的示例 2) 更改存储为提交事件流 使用 git 风格的 checkout 来 rebase 和复制一部分数据并进行本地更改 使用 git-style merge 重放提交到另一个...

    relate:Scala中的高性能数据库访问

    Relate是Scala的轻量级,快速的数据库访问层,它抽象了JDBC的特性,同时保持了对SQL的完全控制。 安装 libraryDependencies + = " com.lucidchart " %% " relate " % " &lt;version&gt; " 例子 val ids = Seq ( 1 , 2 , 3...

    common4s:Scala的通用工具

    共同点Scala的通用工具例子 package exampleimport commons . mapper . Mappersobject EasyExample {def main ( args : Array [ String ]) : Unit = {var map : collection. Map [ String , Any ] = Map ( " id " - ...

    babel-plugin-transform-scala-lambda:启用Scala lambda样式

    将以下行添加到您的.babelrc文件中: { " plugins " : [ " transform-scala-lambda " ] } 例子 对数字列表求和 使用lambda样式 const sum = [ 1 , 1 , 1 ] . reduce ( _ + _ ) ; 没有它 const sum = [ 1 , 1 , 1 ]...

    kafka-streams:哦,您知道,只有一个coupla,两个在Scala的树Kafka Streams

    Scala示例中的Kafka流例子包括字数哦,是的,你知道的。 但是,它在Scala中。 更多信息在这里Kafka Streams自动化测试简介天哪,您对我的字数做了什么!? 更多信息在这里Kafka Streams加入在那儿有一分钟,我认为这...

    money:Scala DSL,用于与金钱相关的操作

    第一步,您需要将解析器和依赖项添加到您的构建文件中: libraryDependencies + = " com.lambdista " %% " money " % " 0.8.0 " 您可以找到所有发行的版本。 可用于Scala 2.13.x,2.12.x的版本。 使用范例 这是一...

    scala-mapifier

    Scala-Mapifier 该项目有助于处理案例类与Map[String, String]对象之间的两种转换。 该项目的起源是找到一种将Scala案例类映射到Postgres中的HSTORE列的优雅方法。 有关如何使用它的示例,请参见测试文件。执照有关...

    map-reduce-test:使用 map reduce 模式解析日志文件

    要在 Ubuntu\Mac 下从命令行运行它,请使用:./parse.sh 文件名(例如:./parse sample.log 为了能够在命令行中操作 src 文件,您应该安装 maven 和 scala: 构建: mvn 编译 执行:mvn exec:java rut 测试:mvn...

    Spark_DBSCAN

    Spark_DBSCAN Spark_DBSCAN 是为 Apache Spark 实现的集群算法的 Scala 开源库安装下载位于的 jar 文件并将其复制到您的库中例子 import org.aizook.scala.clustering.Spark_DBSCAN.Dbscanval eps = 3.0val minPts =...

    Kotlin 语言文档

    Kotlin 语言文档 pdf 目录 概述 4 使用 Kotlin 进行服务器端开发 4 使用 Kotlin 进行 Android 开发 5 Kotlin JavaScript 概述 6 Kotlin 1.1 的新特性 7 开始 15 ...与 Scala 比较【官方已删除】 187

    fertx:功能性Vert.x Web + Scala(受Akka http启发)

    简约示例: HEAD ( " api " / " health " ).map { () =&gt; OK } 如果您觉得map更自然,则可以将其替换为apply 。 上面的例子可以写成: HEAD ( " api " / " health " ) { () =&gt; OK } 从路径中提取数据: GET ( ...

    lighty:ES5 的匿名函数组合器

    lighty:ES5 的匿名函数组合器基于 ES5 并受 Scala 的启发,lighty 旨在... 在 Scala 中是如何做的: val urls = value.split( " \n " ).map(_.trim).filter(_.length &gt; 0 ); 使用 lighty,您可以编写 Scala 风格的 JS

    OnlineLDA_Spark:基于Spark的在线LDA

    在线LDA_Spark 基于Spark的在线LDA 该存储库包含来自在线 LDA 实现。 使用 Apache Spark v1.2.0 开发。... 有关更多详细信息,请参阅 Driver.scala 中的示例。 性能统计,在 4 节点集群上,每个集群有 16

    Spark学习--RDD编码

    RDD可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义对象,本文主要通过Java实现相关示例。 Spark程序或shell会话工作流程 1. 从外部数据创建出输入RDD; 2. 使用诸如filter()等这样的转化...

    seq-for-java8:既不是集合也不是流的序列库

    已参考java.util.stream中的Streams和Scala中的Seq选择了这些接口。 但是,序列是不可变且无状态的。 例子 // import net.argius.java8.seq.Sequence; Sequence&lt;String&gt; seq = Sequence.of("ant", "bean", "coffee...

    PyFunctional:Python库,用于使用链功能编程创建数据管道

    这是它可以做什么的一些示例: 链接的运算符: seq(1, 2, 3).map(lambda x: x * 2).reduce(lambda x, y: x + y) 富有表现力且功能完善的API 读写text , csv , json , jsonl , sqlite , gzip , bz2和lzma/xz...

Global site tag (gtag.js) - Google Analytics