1.Map操作

Map(映射)是一种可迭代的键值对(key/value)结构。

所有的值都可以通过键来获取。

Map 中的键都是唯一的。

Map也叫哈希表(Hash tables)。 Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。 默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类。

  1. package test
  2. /**
  3. * map的操作;
  4. */
  5. object MapDemo {
  6. def main(args: Array[String]): Unit = {
  7. var map = Map[String,String]("name" -> "jason","age" -> "500","test_100" -> "test_100","test_101" -> "test_101") //引用可变,支持读写操作;
  8. map += ("city" -> "北京") //新增
  9. println(map) //打印结果为:Map(city -> 北京, name -> jason, test_100 -> test_100, test_101 -> test_101, age -> 500);
  10. val map2 = Map[String,String]("sex" -> "男","brand" -> "apple") //引用不可变,只能第一次写入值,之后只能读取;
  11. //map2 += ("test" -> "报错吗") //此时不能加,直接报错;
  12. val map3 = scala.collection.mutable.Map[String,String]() //引用不可变,支持读写操作;
  13. map3 += ("test" -> "能添加吗") //添加单个元素;
  14. map3 += ("test" -> "改变了") //更新;
  15. map3 += ("success" -> "添加成功了吗","anthor" -> "另外一个") //添加多个元素;
  16. println(map3) //打印结果为:Map(success -> 添加成功了吗, anthor -> 另外一个, test -> 能添加吗);
  17. println(map3.keys) //返回所有的key;
  18. println(map3.values)//返回所有的value;
  19. println(map3.isEmpty) //当map为空时,返回true;
  20. var combine_map = map ++ map2 //合并两个map;
  21. println(combine_map) //打印结果为:Map(city -> 北京, name -> jason, test_100 -> test_100, test_101 -> test_101, age -> 500, brand -> apple, sex -> 男);
  22. combine_map -= ("city","name") //删除指定的key;
  23. println(combine_map) //打印结果为:Map(test_100 -> test_100, test_101 -> test_101, age -> 500, brand -> apple, sex -> 男)
  24. println(combine_map.get("age").get) //返回指定key的值;
  25. println(combine_map.init) //返回所有元素,除了最后一个;
  26. println(combine_map.last) //返回最后一个元素;
  27. println(combine_map.max) //查找最大元素;
  28. println(combine_map.min) //查找最小元素;
  29. println(combine_map.mkString("")) //集合所有元素作为字符串显示;
  30. //println(combine_map.product) //返回集合中数字元素的积;注意得是num型;
  31. println(combine_map.size) //返回map的大小;
  32. println(combine_map.toArray) //集合转数组;
  33. println(combine_map.toBuffer) //返回缓冲区,包含了Map的所有元素;
  34. println(combine_map.toList) //返回List,包含了Map的所有元素;
  35. combine_map.get("test_101").getOrElse("不存在") //根据key取value值,如果不存在返回后面的值;
  36. val keySet = combine_map.keys
  37. val key_iter = keySet.iterator //遍历,迭代map;
  38. while (key_iter.hasNext){
  39. val key = key_iter.next
  40. println(key + ":" + combine_map.get(key).get)
  41. }
  42. println(combine_map.apply("brand")) //返回指定键的值,如果不存在返回 Map 的默认方法;
  43. println(combine_map.contains("test_key")) //如果map中存在指定 key,返回 true,否则返回 false;
  44. val age_count = combine_map.count(x=>{ //计算满足指定条件的集合元素数量;
  45. x._1.equals("age")
  46. })
  47. println(age_count) //打印结果为1;
  48. val drop_map = combine_map.drop(1) //返回丢弃最后n个元素新集合;
  49. println(drop_map) //打印结果为:Map(brand -> apple, sex -> 男);
  50. println(combine_map.empty) //返回相同类型的空map;
  51. println(map.equals(map2)) //如果两个 Map 相等(key/value 均相等),返回true,否则返回false;
  52. println(combine_map.exists(x => { //判断集合中指定条件的元素是否存在;
  53. x._2.equals("男")
  54. }))
  55. println(combine_map.filter(x=>{ //返回满足指定条件的所有集合; 结果为:Map(brand -> apple);
  56. x._1.length > 4
  57. }))
  58. println(combine_map.filterKeys(x=>{ //返回符合指定条件的不可变 Map;
  59. x.equals("test_100")
  60. }))
  61. println(combine_map.find(x=>{ //查找集合中满足指定条件的第一个元素;
  62. x._1.equals(x._2)
  63. }))
  64. combine_map.foreach(x=>{ //循环map里的所有元素;
  65. println(x +"------------")
  66. })
  67. }
  68. }

2.List操作

Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。

2.1Demo1

  1. object Scala_List {
  2. def main(args:Array[String]):Unit={
  3. val list=List[String]("hello bjsxt","hello bjsxt","hello shsxt","hello gzsxt")
  4. val result = list.count(s=>{
  5. s.equals("hello sdhsxt")
  6. })
  7. println(result)
  8. val result1=list.filter(s=>{
  9. s.equals("hello bjsxt")
  10. })
  11. result1.foreach(println)
  12. println("以下是循环遍历")
  13. val result3=list.map(s=>{
  14. s.split(" ")
  15. })
  16. result3.foreach(arr=>{
  17. arr.foreach(println)
  18. println("*********************")
  19. })
  20. println("????????????????????????????/")
  21. val result4=list.flatMap(s=>{
  22. s.split(" ")
  23. })
  24. result4.foreach(println)
  25. println("................................")
  26. val list1=List[Int](1,2,3,4,4)
  27. list1.foreach(println)
  28. println(";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;")
  29. for(elem<-list1){
  30. println(elem)
  31. }
  32. }
  33. }

2.2Demo2

  1. package test
  2. object listDemo {
  3. def main(args: Array[String]): Unit = {
  4. val list: List[String] = List("a", "b" ,"a")
  5. //为列表预添加元素
  6. println("A" +: list)
  7. //在列表开头添加元素
  8. println("c" :: list)
  9. //在列表开头添加指定列表的元素
  10. println(List("d","e") ::: list)
  11. //复制添加元素后列表
  12. println(list :+ "1")
  13. //将列表的所有元素添加到 StringBuilder
  14. val sb = new StringBuilder("f")
  15. println(list.addString(sb))
  16. //指定分隔符
  17. println(list.addString(sb,","))
  18. //通过列表索引获取元素
  19. println(list.apply(0))
  20. //检测列表中是否包含指定的元素
  21. println(list.contains("a"))
  22. //将列表的元素复制到数组中,在给定的数组xs中填充该列表的最多为长度(len)元素,从start位置开始。
  23. val a = Array('a', 'b', 'c')
  24. val b : Array[Char] = new Array(5)
  25. a.copyToArray(b,0,1)
  26. b.foreach(println)
  27. //去除列表的重复元素,并返回新列表
  28. println(list.distinct)
  29. //丢弃前n个元素,并返回新列表
  30. println(list.drop(1))
  31. //丢弃最后n个元素,并返回新列表
  32. println(list.dropRight(1))
  33. //从左向右丢弃元素,直到条件p不成立
  34. println(list.dropWhile(_.equals("a")))
  35. //检测列表是否以指定序列结尾
  36. println(list.endsWith(Seq("a")))
  37. //判断是否相等
  38. println(list.head.equals("a"))
  39. //判断列表中指定条件的元素是否存在,判断l是否存在某个元素
  40. println(list.exists(x=> x == "a"))
  41. //输出符号指定条件的所有元素
  42. println(list.filter(x=> x.equals("a")))
  43. //检测所有元素
  44. println(list.forall(x=> x.startsWith("b")))
  45. //将函数应用到列表的所有元素
  46. list.foreach(println)
  47. //获取列表的第一个元素
  48. println(list.head)
  49. //从指定位置 from 开始查找元素第一次出现的位置
  50. println(list.indexOf("b",0))
  51. //返回所有元素,除了最后一个
  52. println(list.init)
  53. //计算多个集合的交集
  54. println(list.intersect(Seq("a","b")))
  55. //检测列表是否为空
  56. println(list.isEmpty)
  57. //创建一个新的迭代器来迭代元素
  58. val it = list.iterator
  59. while (it.hasNext){
  60. println(it.next())
  61. }
  62. //返回最后一个元素
  63. println(list.last)
  64. //在指定的位置 end 开始查找元素最后出现的位置
  65. println(list.lastIndexOf("b",1))
  66. //返回列表长度
  67. println(list.length)
  68. //通过给定的方法将所有元素重新计算
  69. list.map(x=> x+"jason").foreach(println)
  70. //查找最大元素
  71. println(list.max)
  72. //查找最小元素
  73. println(list.min)
  74. //列表所有元素作为字符串显示
  75. println(list.mkString)
  76. //使用分隔符将列表所有元素作为字符串显示
  77. println(list.mkString(","))
  78. //列表反转
  79. println(list.reverse)
  80. //列表排序
  81. println(list.sorted)
  82. //检测列表在指定位置是否包含指定序列
  83. println(list.startsWith(Seq("a"),1))
  84. //计算集合元素之和,这个地方必须是int类型,如果是string直接报错
  85. //println(list.sum)
  86. //返回所有元素,除了第一个
  87. println(list.tail)
  88. //提取列表的前n个元素
  89. println(list.take(2))
  90. //提取列表的后n个元素
  91. println(list.takeRight(1))
  92. //列表转换为数组
  93. println(list.toArray)
  94. //返回缓冲区,包含了列表的所有元素
  95. println(list.toBuffer)
  96. //List 转换为 Map
  97. val arr = Array(("jason", 24), ("jim", 25))
  98. arr.toMap.foreach(println)
  99. //List 转换为 Seq
  100. println(list.toSeq)
  101. //List 转换为 Set
  102. println(list.toSet)
  103. //列表转换为字符串
  104. println(list.toString())
  105. }
  106. }

运行结果如下:

  1. List(A, a, b, a)
  2. List(c, a, b, a)
  3. List(d, e, a, b, a)
  4. List(a, b, a, 1)
  5. faba
  6. fabaa,b,a
  7. a
  8. true
  9. a
  10. List(a, b)
  11. List(b, a)
  12. List(a, b)
  13. List(b, a)
  14. true
  15. true
  16. true
  17. List(a, a)
  18. false
  19. a
  20. b
  21. a
  22. a
  23. 1
  24. List(a, b)
  25. List(a, b)
  26. false
  27. a
  28. b
  29. a
  30. a
  31. 1
  32. 3
  33. ajason
  34. bjason
  35. ajason
  36. b
  37. a
  38. aba
  39. a,b,a
  40. List(a, b, a)
  41. List(a, a, b)
  42. false
  43. List(b, a)
  44. List(a, b)
  45. List(a)
  46. [Ljava.lang.String;@51cdd8a
  47. ArrayBuffer(a, b, a)
  48. (jason,24)
  49. (jim,25)
  50. List(a, b, a)
  51. Set(a, b)
  52. List(a, b, a)

3.:: , +:, :+, :::, +++

  1. package test
  2. /**
  3. * scala中的:: , +:, :+, :::, +++, 等操作;
  4. */
  5. object listTest {
  6. def main(args: Array[String]): Unit = {
  7. val list = List(1,2,3)
  8. // :: 用于的是向队列的头部追加数据,产生新的列表, x::list,x就会添加到list的头部
  9. println(4 :: list) //输出: List(4, 1, 2, 3)
  10. // .:: 这个是list的一个方法;作用和上面的一样,把元素添加到头部位置; list.::(x);
  11. println( list.:: (5)) //输出: List(5, 1, 2, 3)
  12. // :+ 用于在list尾部追加元素; list :+ x;
  13. println(list :+ 6) //输出: List(1, 2, 3, 6)
  14. // +: 用于在list的头部添加元素;
  15. val list2 = "A"+:"B"+:Nil //Nil Nil是一个空的List,定义为List[Nothing]
  16. println(list2) //输出: List(A, B)
  17. // ::: 用于连接两个List类型的集合 list ::: list2
  18. println(list ::: list2) //输出: List(1, 2, 3, A, B)
  19. // ++ 用于连接两个集合,list ++ list2
  20. println(list ++ list2) //输出: List(1, 2, 3, A, B)
  21. }
  22. }

原文作者:JasonLee’blog

scala之map,List,:: , +:, :+, :::, +++操作的更多相关文章

  1. scala的map的操作

    1:map和模式匹配的结合 settings.foreach{case (k,v) => set(k,v)} 2:map转成array settings.entrySet().asScala.m ...

  2. scala 数据结构(八 ):-map映射操作

    在Scala中可以通过map映射操作来解决: 将集合中的每一个元素通过指定功能(函数)映射(转换)成新的结果集合这里其实就是所谓的将函数作为参数传递给另外一个函数,这是函数式编程的特点 以HashSe ...

  3. Scala集合Map

    在scala中Map分为可变长(mutable)和不可变长(immutable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过箭头的方式创建map val map = ...

  4. scala (6) Map

    在scala中Map分为可变长(mutable)和不可变长(imtable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过对偶元组的方式创建map val map = ...

  5. 11. Scala数据结构(下)-集合操作

    11.1 集合元素的映射-map映射操作 11.1.1 看一个实际需求 要求:请将List(3,5,8)中所有的元素都*2,将其结果放到一个新的集合中返回,即返回一个新的List(6,10,16),请 ...

  6. 10. Scala数据结构(上)-集合操作

    10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...

  7. Commons BeanUtils 中对Map的操作

    CSDN学院招募微信小程序讲师啦 程序员简历优化指南! [观点]移动原生App开发 PK HTML 5开发 云端应用征文大赛,秀绝招,赢无人机! Commons BeanUtils 中对Map的操作 ...

  8. Scala学习——函数高级操作

    scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...

  9. Scala基础类型与操作

    Scala基本类型及操作.程序控制结构 Scala基本类型及操作.程序控制结构 (一)Scala语言优势 自身语言特点: 纯面向对象编程的语言 函数式编程语言 函数式编程语言语言应该支持以下特性: 高 ...

随机推荐

  1. 发起一个开源项目:基于 .NET 的博客引擎 fluss

    今天我们发起一个开源项目,它的名字叫 fluss,fluss 是 river 的德语. 百川归海,每一个博客就如一条河流,输入的是文字,流出的是知识,汇入的是知识的汪洋大海. 川流不息,fluss 是 ...

  2. MODBUS_RTU通信协议

    Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表.Modbus已经成为工业领域通信协议 ...

  3. 单细胞分析实录(8): 展示marker基因的4种图形(一)

    今天的内容讲讲单细胞文章中经常出现的展示细胞marker的图:tsne/umap图.热图.堆叠小提琴图.气泡图,每个图我都会用两种方法绘制. 使用的数据来自文献:Single-cell transcr ...

  4. shellSyntax.md

    shell #! /bin/bash 头文件 echo -e 若字符串出现特殊字符,则特别处理      -n 不要在最后自动换行     ./filename.sh sh filename.sh r ...

  5. P3714 [BJOI2017]树的难题 点分治+线段树合并

    题目描述 题目传送门 分析 路径问题考虑点分治 对于一个分治中心,我们可以很容易地得到从它开始的一条路径的价值和长度 问题就是如何将不同的路径合并 很显然,对于同一个子树中的所有路径,它们起始的颜色是 ...

  6. oracle数据库psu升级(本实验是将10.2.0.3.12升级到10.2.0.3.15)

    psu升级(本实验是将10.2.0.3.12升级到10.2.0.3.15) 一.解压安装包自定义存放路径为/home/oracle/yjb/psu/10.2.0.3.15cd /home/oracle ...

  7. 【老孟Flutter】2021 年 Flutter 官方路线图

    老孟导读:这是官方公布的2021年路线图,向我们展示了2021年 Flutter 的主要工作及计划. 原文地址:https://github.com/flutter/flutter/wiki/Road ...

  8. 剑指offer 面试题4:二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  9. 一文带你学会AQS和并发工具类的关系

    1. 存在的意义   AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实 ...

  10. MybatisPlus多数据源及事务解决思路

    关于多数据源解决方案 目前在SpringBoot框架基础上多数据源的解决方案大多手动创建多个DataSource,后续方案有三: 继承org.springframework.jdbc.datasour ...