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学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
《scala集合技术手册》笔记+《LearningConcurrentProgrammingInScala》例子及习题
在这里,你会学习到Scala的安装与环境配置,理解Scala的基本语法,包括变量声明、数据类型(如基本类型、引用类型和集合类型)、控制结构(如条件语句和循环)以及函数定义和调用。此外,还会介绍Scala中的模式匹配...
### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...
Scala提供了丰富的集合框架,包括不可变集合和可变集合,支持诸如`List`、`Set`、`Map`等多种数据结构。 #### 异常 Scala中的异常处理与Java类似,支持`try`、`catch`和`finally`块。 #### 断言、检查 Scala还支持...
- **集合框架**:Scala 提供了强大的集合框架,包括不可变集合(如 `Set` 和 `Map`)和可变集合(如 `ArrayBuffer`)。 ### 5. 类与对象 - **类与对象定义**:Scala 支持面向对象编程,可以定义类和对象,并实现...
4. 集合库:Scala的集合库设计精良,包含各种高效的数据结构,如List、Set、Map等。这些集合不仅支持传统的OOP操作,还提供了丰富的函数式API,如map、filter、fold等,方便进行数据处理。 5. 特性与模式匹配:...
* for 语句:Scala 的 for 语句可以遍历集合、循环守卫、循环步长和嵌套循环等。 * while 循环:Scala 的 while 循环与 Java 相似,但可以使用 `break` 语句中断循环。 函数式编程 Scala 的函数式编程是指使用函数...
本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...
初学者通常从基础语法开始,包括变量声明、函数定义、类和对象的创建,然后逐步接触更高阶的概念,如模式匹配、Actor模型、集合操作等。通过编写简单的示例程序,可以快速上手Scala编程。 总的来说,Scala是一门...
目录如下 Scala简介&快速入门 基础语法 变量 数据类型 流程控制 ...Scala数据结构之集合 函数式编程高级 隐式转换和隐式值 偏函数 高阶函数 闭包closure 柯里化函数 控制抽象 递归高级 Akka 介绍
- Scala的集合库是其强大之处,提供了一组高性能的集合实现,如List, Set, Map和ArrayBuffer。 - 支持惰性求值的集合,如Stream和View,能有效提高性能。 - 集合操作如`flatMap`, `map`, `filter`等是函数式编程...
本笔记涵盖了Scala的基础到集合章节,旨在帮助开发者深入理解Scala的核心概念和用法。 **1. Scala简介** Scala由Martin Odersky在2003年设计,目标是创建一种既具有静态类型安全性又能支持敏捷开发的语言。它运行在...
文档中可能会介绍如何使用`map`、`filter`等函数操作集合。 Scala还引入了模式匹配,这是一种强大的控制流构造,可以用于解构复杂的数据结构。通过模式匹配,你可以根据数据的不同类型或结构执行不同的操作。在学习...
`getElementById`返回单个元素,而`getElementsByTagName`返回元素集合,需要注意数组取值时加上方括号。了解这些基本DOM操作对前端开发至关重要。 6. **数组操作**: 求解数组最大值或最小值,可以初始化一个...
5. **集合框架**:Scala集合库的强大之处,如List、Set、Map、Option等数据结构的使用。 6. ** Actors模型**:Scala支持并发处理的Actors模型,以及如何构建并行和分布式系统。 7. ** Scalactic和Specs2**:这两个...
9. 高级特性:进一步深入,包括一对多、多对一、一对一、多对多关系的映射,级联操作,延迟加载,双向关联的维护,以及集合的映射等。此外,还可以探讨CGLIB和ASM动态代理,以及Hibernate的事件监听机制。 通过这4...
它旨在通过一个一键式虚拟机轻松获得,该虚拟机配备了易于使用的IPython笔记本集合,以促进交互式学习。 Scala编程的复杂性和能力使其成为构建高性能和可扩展数据密集型应用程序的理想选择。无论你是对函数式编程和...
12. 集合API:Scala提供了丰富的集合API,如List、Set、Map等,支持函数式编程操作。 七、 Actors和Concurrent编程 13. Akka框架:利用Actor模型实现并发,每个Actor有自己的状态和邮箱,通过消息传递进行通信。 ...