Scala的集合框架类比Java提供了更多的一些方便的api,使得使用scala编程时代码变得非常精简,尤其是在Spark中,很多功能都是由scala的这些api构成的,所以,了解这些方法的使用,将更加有助于我们学习Scala和Spark:
List,Map,Set的一些api的用法如下:
/**
* Scala 集合测试
*/
def collectionTest(): Unit ={
val map =Map("red"->"红色","green"->"绿色")
val colors = List("red", "green", "blue")
//map函数测试 ,打印长度
val size=colors.map( (f:String) => f.size );
val data=List(1,2,5,3);
//reduce函数测试 求和
val r=data.reduce((a:Int,b:Int)=>a+b);
println(size," ",r)
//打印取值
println(map("red"))
//判断是否存在
println(map.contains("white"))
//遍历map集合
for(pair<-map) println(pair)
//去重打印
println(List(3,2,3,4,5).distinct)
//fitler过滤
println(List(3,12,33,64,15).filter(_ > 18))
//扁平化处理
println(List(List(1, 2), List(3, 4)).flatten)
//partition 分区
println(List(1, 2, 3, 4, 5) partition (_ < 3))
//反转集合
println(List(1, 2, 3).reverse)
//slice==>与java的substring类似
println(List(2, 3, 5, 7) slice (1, 4))
//排序sortBy
println(List("apple", "to","a","ab") sortBy (_.size) )
//排序原生值
println(List("apple", "to","bag","bbc","one").sorted)
//splitAt值拆分一个list,根据下标的位置
println(List(2, 3, 5, 7,99,45) splitAt 3)
//提取第n个元素之前数据作为一个新的集合
println(List(2, 3, 5, 7, 11, 13) take 2)
//合并两个集合,进入一个大的集合
println(List(1, 2) zip List("a", "b") )
//删除前n个元素后,新生成一个集合
println(List('a', 'b', 'c', 'd') drop 1)
//判断两个集合是否相等
println(List(1, 2) == List(1, 2))
//合并两个集合 ++
println(List(1, 2) ++ Set(3, 4, 3) )
//合并两个集合
println(List(1, 2) ::: List(2, 3))
//添加一个元素
println(1 :: 2 :: Nil)
//添加一个元素
println(List(1,6).:+(5))
//遍历每一个元素,收集case匹配上的元素值,返回一个新的集合
println(List(0, 1, 0) collect {case 1 => "ok"})
//将一个元素,根据特定符号,拆分成单个元素组成的集合
println(List("milk,tea") flatMap (_.split(',')))
//最大值
println(List(41, 59, 26).max)
//最小值
println(List(10.9, 32.5, 4.23, 5.67).min)
//连乘
println(List(5, 6, 10).product)
//求和
println(List(11.3, 23.5, 7.2).sum )
//是否存在
println(List(34, 29, 18) contains 29 )
//是否以xxx结束
println(List(0, 4, 3) endsWith List(4, 3))
//是否以xxx开始
println(List(0, 4, 3) startsWith List(0) )
//最少有一个值小于18即为true
println(List(24, 17, 32) exists (_ < 18))
println("=======================================")
//必须得所有值小于18才返回true
println(List(5, 17, 2) forall (_ < 18) )
//求和
println(List(4, 5, 6).fold(8)(_ + _))
//求和
println(List(4, 5, 6).foldLeft(10)(_ + _))
//求和
println(List(4, 5, 6).foldRight(0)(_ + _) )
//求和
println(List(4, 5, 6).reduce(_ + _) )
//求和
println(List(4, 5, 6).reduceLeft(_ + _) )
//求和
println(List(4, 5, 6).reduceRight(_ + _) )
//阶段求和
println(List(4, 5, 6).scan(0)(_ + _))
//阶段求和
println(List(4, 5, 6).scanLeft(0)(_ + _))
//阶段求和
println(List(4, 5, 6).scanRight(0)(_ + _))
//集合转换字符串
println(List(24, 99, 104).mkString(", "))
//转成ArrayBuffer
println(List('f', 't').toBuffer)
//转Map to List
println(Map("a" -> 1, "b" -> 2).toList )
//转Set to Map
println(Set(1 -> true, 3 -> true).toMap)
//转List to Set
println(List(2, 5, 5, 3, 2).toSet)
//转List to String
println(List(2, 5, 5, 3, 2).toString)
//Java 与 Scala 集合互转
//导入包
import collection.JavaConverters._
import collection.JavaConversions._
import java.util.ArrayList;
// scala 转 java
val ja =List(1,5,3).asJava
println(List(1,5,3))
println(ja)
// java 转 scala
val s =new java.util.ArrayList(3).asScala;
//集合的模式匹配
val statuses = List(500, 404)
val msg = statuses.head match {
case x if x < 500 => "okay"
case _ => "whoah, an error"
}
println("信息:",msg)
val msg2 = statuses match {
case x if x contains(500) => "has error"
case _ => "okay"
}
println("信息:",msg2)
val msg3 = statuses match {
case List(404, 500) => "not found & error"
case List(500, 404) => "error & not found"
case List(200, 200) => "okay"
case _ => "not sure what happened"
}
println("信息:",msg3)
val msg4 = statuses match {
case List(500, x) => s"Error followed by $x"
case List(e, x) => s"$e was followed by $x"
}
println("信息:",msg4)
val head = List('r','g','b') match {
case x :: xs => x
case Nil => ' '
}
println(head)
val code = ('h', 204, true) match {
case (_, _, false) => 501
case ('c', _, true) => 302
case ('h', x, true) => x
case (c, x, true) => {
println(s"Did not expect code $c")
x
}
}
println(code)
}
顺序输出结果如下:
(List(3, 5, 4), ,11)
红色
false
(red,红色)
(green,绿色)
List(3, 2, 4, 5)
List(33, 64)
List(1, 2, 3, 4)
(List(1, 2),List(3, 4, 5))
List(3, 2, 1)
List(3, 5, 7)
List(a, to, ab, apple)
List(apple, bag, bbc, one, to)
(List(2, 3, 5),List(7, 99, 45))
List(2, 3)
List((1,a), (2,b))
List(b, c, d)
true
List(1, 2, 3, 4)
List(1, 2, 2, 3)
List(1, 2)
List(1, 6, 5)
List(ok)
List(milk, tea)
59
4.23
300
42.0
true
true
true
true
=======================================
true
23
25
15
15
15
15
List(0, 4, 9, 15)
List(0, 4, 9, 15)
List(15, 11, 6, 0)
24, 99, 104
ArrayBuffer(f, t)
List((a,1), (b,2))
Map(1 -> true, 3 -> true)
Set(2, 5, 3)
List(2, 5, 5, 3, 2)
List(1, 5, 3)
[1, 5, 3]
(信息:,whoah, an error)
(信息:,has error)
(信息:,error & not found)
(信息:,Error followed by 404)
r
204
Process finished with exit code 0
最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
分享到:
相关推荐
学习scala笔记,学习scala笔记,学习scala笔记,学习scala笔记,学习scala笔记,
Scala学习笔记,大全笔记
Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用
该文档详细的讲述了Scala的基础操作方法和高级使用方法
scala 学习笔记 方法 函数 类 对象 特质 推断 注解 编译 隐式转换 尾递归 元组 列表
map[B](f: (A) ? B): List[B] 定义一个变换,把该变换应用到列表的每个元素中,原列表不变,返回一个新的列表数据
快速掌握集合,Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质 在Scala中集合有可变(mutable)和不可变(immutable)两种类型
学习spark之前,大家必须先学会Scala这门语言,他是spark的基础,这里总结了一下Scala集合的相关知识点
Scala集合类型.md
[Scala学习笔记-中文资料] 从java角度看Scala
ScalaOverview.pdf ScalaTutorial.pdf ProgrammingInScala.pdf(这本是书) 博文链接:https://dogstar.iteye.com/blog/182673
Scala集合Java开发Java经验技巧共9页.pdf.zip
自己整理的Scala语言的笔记,可能会存在失误等情况,请各位能够批评指正!我会及时修改!谢谢!
Scala集合(二)Java开发Java经验技巧共10页.pdf.zip
结合实例讲解scala语法,代码可复制,有注释,有重点。一共5份PDF文档,轻松入门也可进阶。
Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...
scala基础知识笔记
此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景...