Scala的集合框架类比Java提供了更多的一些方便的api,使得使用scala编程时代码变得非常精简,尤其是在Spark中,很多功能都是由scala的这些api构成的,所以,了解这些方法的使用,将更加有助于我们学习Scala和Spark: 
List,Map,Set的一些api的用法如下: 

  1. /**
  2. * Scala 集合测试
  3. */
  4. def collectionTest(): Unit ={
  5. val map =Map("red"->"红色","green"->"绿色")
  6. val colors = List("red", "green", "blue")
  7. //map函数测试 ,打印长度
  8. val size=colors.map( (f:String) => f.size  );
  9. val data=List(1,2,5,3);
  10. //reduce函数测试 求和
  11. val r=data.reduce((a:Int,b:Int)=>a+b);
  12. println(size,"            ",r)
  13. //打印取值
  14. println(map("red"))
  15. //判断是否存在
  16. println(map.contains("white"))
  17. //遍历map集合
  18. for(pair<-map) println(pair)
  19. //去重打印
  20. println(List(3,2,3,4,5).distinct)
  21. //fitler过滤
  22. println(List(3,12,33,64,15).filter(_ > 18))
  23. //扁平化处理
  24. println(List(List(1, 2), List(3, 4)).flatten)
  25. //partition 分区
  26. println(List(1, 2, 3, 4, 5) partition (_ < 3))
  27. //反转集合
  28. println(List(1, 2, 3).reverse)
  29. //slice==>与java的substring类似
  30. println(List(2, 3, 5, 7) slice (1, 4))
  31. //排序sortBy
  32. println(List("apple", "to","a","ab") sortBy (_.size) )
  33. //排序原生值
  34. println(List("apple", "to","bag","bbc","one").sorted)
  35. //splitAt值拆分一个list,根据下标的位置
  36. println(List(2, 3, 5, 7,99,45) splitAt 3)
  37. //提取第n个元素之前数据作为一个新的集合
  38. println(List(2, 3, 5, 7, 11, 13) take 2)
  39. //合并两个集合,进入一个大的集合
  40. println(List(1, 2) zip List("a", "b") )
  41. //删除前n个元素后,新生成一个集合
  42. println(List('a', 'b', 'c', 'd') drop 1)
  43. //判断两个集合是否相等
  44. println(List(1, 2) == List(1, 2))
  45. //合并两个集合 ++
  46. println(List(1, 2) ++ Set(3, 4, 3) )
  47. //合并两个集合
  48. println(List(1, 2) ::: List(2, 3))
  49. //添加一个元素
  50. println(1 :: 2 :: Nil)
  51. //添加一个元素
  52. println(List(1,6).:+(5))
  53. //遍历每一个元素,收集case匹配上的元素值,返回一个新的集合
  54. println(List(0, 1, 0) collect {case 1 => "ok"})
  55. //将一个元素,根据特定符号,拆分成单个元素组成的集合
  56. println(List("milk,tea") flatMap (_.split(',')))
  57. //最大值
  58. println(List(41, 59, 26).max)
  59. //最小值
  60. println(List(10.9, 32.5, 4.23, 5.67).min)
  61. //连乘
  62. println(List(5, 6, 10).product)
  63. //求和
  64. println(List(11.3, 23.5, 7.2).sum )
  65. //是否存在
  66. println(List(34, 29, 18) contains 29 )
  67. //是否以xxx结束
  68. println(List(0, 4, 3) endsWith List(4, 3))
  69. //是否以xxx开始
  70. println(List(0, 4, 3) startsWith List(0) )
  71. //最少有一个值小于18即为true
  72. println(List(24, 17, 32) exists (_ < 18))
  73. println("=======================================")
  74. //必须得所有值小于18才返回true
  75. println(List(5, 17, 2) forall (_ < 18) )
  76. //求和
  77. println(List(4, 5, 6).fold(8)(_ + _))
  78. //求和
  79. println(List(4, 5, 6).foldLeft(10)(_ + _))
  80. //求和
  81. println(List(4, 5, 6).foldRight(0)(_ + _) )
  82. //求和
  83. println(List(4, 5, 6).reduce(_ + _) )
  84. //求和
  85. println(List(4, 5, 6).reduceLeft(_ + _) )
  86. //求和
  87. println(List(4, 5, 6).reduceRight(_ + _) )
  88. //阶段求和
  89. println(List(4, 5, 6).scan(0)(_ + _))
  90. //阶段求和
  91. println(List(4, 5, 6).scanLeft(0)(_ + _))
  92. //阶段求和
  93. println(List(4, 5, 6).scanRight(0)(_ + _))
  94. //集合转换字符串
  95. println(List(24, 99, 104).mkString(", "))
  96. //转成ArrayBuffer
  97. println(List('f', 't').toBuffer)
  98. //转Map to List
  99. println(Map("a" -> 1, "b" -> 2).toList )
  100. //转Set to Map
  101. println(Set(1 -> true, 3 -> true).toMap)
  102. //转List to Set
  103. println(List(2, 5, 5, 3, 2).toSet)
  104. //转List to String
  105. println(List(2, 5, 5, 3, 2).toString)
  106. //Java 与 Scala 集合互转
  107. //导入包
  108. import  collection.JavaConverters._
  109. import  collection.JavaConversions._
  110. import java.util.ArrayList;
  111. // scala 转 java
  112. val ja  =List(1,5,3).asJava
  113. println(List(1,5,3))
  114. println(ja)
  115. // java 转 scala
  116. val s =new java.util.ArrayList(3).asScala;
  117. //集合的模式匹配
  118. val statuses = List(500, 404)
  119. val msg = statuses.head match {
  120. case x if x < 500 => "okay"
  121. case _ => "whoah, an error"
  122. }
  123. println("信息:",msg)
  124. val msg2 = statuses match {
  125. case x if x contains(500) => "has error"
  126. case _ => "okay"
  127. }
  128. println("信息:",msg2)
  129. val msg3 = statuses match {
  130. case List(404, 500) => "not found & error"
  131. case List(500, 404) => "error & not found"
  132. case List(200, 200) => "okay"
  133. case _ => "not sure what happened"
  134. }
  135. println("信息:",msg3)
  136. val msg4 = statuses match {
  137. case List(500, x) => s"Error followed by $x"
  138. case List(e, x) => s"$e was followed by $x"
  139. }
  140. println("信息:",msg4)
  141. val head = List('r','g','b') match {
  142. case x :: xs => x
  143. case Nil => ' '
  144. }
  145. println(head)
  146. val code = ('h', 204, true) match {
  147. case (_, _, false) => 501
  148. case ('c', _, true) => 302
  149. case ('h', x, true) => x
  150. case (c, x, true) => {
  151. println(s"Did not expect code $c")
  152. x
  153. }
  154. }
  155. println(code)
  156. }


顺序输出结果如下: 

    1. (List(3, 5, 4),            ,11)
    2. 红色
    3. false
    4. (red,红色)
    5. (green,绿色)
    6. List(3, 2, 4, 5)
    7. List(33, 64)
    8. List(1, 2, 3, 4)
    9. (List(1, 2),List(3, 4, 5))
    10. List(3, 2, 1)
    11. List(3, 5, 7)
    12. List(a, to, ab, apple)
    13. List(apple, bag, bbc, one, to)
    14. (List(2, 3, 5),List(7, 99, 45))
    15. List(2, 3)
    16. List((1,a), (2,b))
    17. List(b, c, d)
    18. true
    19. List(1, 2, 3, 4)
    20. List(1, 2, 2, 3)
    21. List(1, 2)
    22. List(1, 6, 5)
    23. List(ok)
    24. List(milk, tea)
    25. 59
    26. 4.23
    27. 300
    28. 42.0
    29. true
    30. true
    31. true
    32. true
    33. =======================================
    34. true
    35. 23
    36. 25
    37. 15
    38. 15
    39. 15
    40. 15
    41. List(0, 4, 9, 15)
    42. List(0, 4, 9, 15)
    43. List(15, 11, 6, 0)
    44. 24, 99, 104
    45. ArrayBuffer(f, t)
    46. List((a,1), (b,2))
    47. Map(1 -> true, 3 -> true)
    48. Set(2, 5, 3)
    49. List(2, 5, 5, 3, 2)
    50. List(1, 5, 3)
    51. [1, 5, 3]
    52. (信息:,whoah, an error)
    53. (信息:,has error)
    54. (信息:,error & not found)
    55. (信息:,Error followed by 404)
    56. r
    57. 204
    58. Process finished with exit code 0

Scala集合笔记的更多相关文章

  1. Scala 学习笔记之集合(3)

    建立一个Java类,为了演示Java集合类型向Scala集合的转换: import java.util.ArrayList; import java.util.List; public class S ...

  2. scala 学习笔记--集合

    1.scala集合的null 是nil 而不是null 2.set的三个方法union,intersect,diff union--合并去重 intersect--交集 diff--a减去(a和b交集 ...

  3. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  4. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  5. Scala编程 笔记

    date: 2019-08-07 11:15:00 updated: 2019-11-25 20:00:00 Scala编程 笔记 1. makeRDD 和 parallelize 生成 RDD de ...

  6. Scala集合操作

    大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: 1.数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储技术现在比较经典方案是使用Hadoop,不过也很多方案采用Kafka.  ...

  7. Spark:scala集合转化为DS/DF

    scala集合转化为DS/DF case class TestPerson(name: String, age: Long, salary: Double) val tom = TestPerson( ...

  8. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  9. Scala集合常用方法解析

    Java 集合 : 数据的容器,可以在内部容纳数据  List : 有序,可重复的  Set : 无序,不可重复  Map : 无序,存储K-V键值对,key不可重复 scala 集合 : 可变集合( ...

随机推荐

  1. wagger的展示路径修改

    转:https://www.jianshu.com/p/ce7e247515f5?utm_source=oschina-app 注:本文是基于springboot配置实现,但在实际中使用springm ...

  2. shell中脚本变量和函数变量的作用域

    http://blog.csdn.net/ltx19860420/article/details/5570902 1. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到she ...

  3. 增加swap分区,文件形式

    查看swap a: sudo swapon -s b: free -m 文件方式: 1. 生成 生成一个1Gb(bs*count)的文件 [root@localhost ~]# dd if=/dev/ ...

  4. SQL Server 2012/2016/2017 新增函数

    /************************************************************** SQL Server 2012 新增的函数 ************** ...

  5. Docker mysql主主互备和高可用

    一.测试环境 1.1 结构图 1.2 版本 操作系统:CentOS 7.3 MySQL版本:5.6.35 Docker版本:18.06.1-ce 使用root用户操作 IP地址说明 IP地址 用途 备 ...

  6. 搭建Spring4+Spring MVC web工程的最佳实践

    Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...

  7. tomcat在Debug模式下无法启动解决办法

    环境:eclipse,JDK1.6,tomcat6.0 问题:在server中正常启动tomcat是没问题的,javaweb项目也可正常访问,使用debug模式启动的话速度特别慢(好像一直处于那种启动 ...

  8. Linux命令之rm

    rm命令 用处:删除文件 用法:在终端上输入rm加上要删除的文件的名字(如果有的话,包括后缀) 示例: (我要删除newfile这个文件)

  9. CM记录-Hadoop参数调优

    1.HDFS调优 a.设置合理的块大小(dfs.block.size) b.将中间结果目录设置为分布在多个磁盘以提升写入速度(mapred.local.dir) c.设置DataNode处理RPC的线 ...

  10. AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制

    概要: AQS维护了一个同步队列 Condition是JUC的一个接口,AQS的ConditionObject实现了这个接口,维护了一个等待队列(等待signal信号的队列) 线程调用reentran ...