Scala教程-2 集合操作

本博客简要讲述了Scala集合的核心操作,是学习Scala必须掌握的基础知识,后续更新Scala的高级语法糖。

2. 集合操作

2.1 List集合

2.1.1 声明一个List集合

scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)

2.1.2 List集合的map操作

操作一: 基本操作

scala> val newList = list.map((x:Int)=>2*x)
newList: List[Int] = List(2, 4, 6, 8, 10, 12)

操作二: 由于List中只有一种元素类型,所以可以省略参数类型

scala> val newList = list.map((x)=>2*x)
newList: List[Int] = List(2, 4, 6, 8, 10, 12)

操作三: 如果只有一个参数,则可以省略参数列表的括号

scala> val newList = list.map(x=>2*x)
newList: List[Int] = List(2, 4, 6, 8, 10, 12)

操作四: 使用占位符表示集合中的元素

scala> val newList = list.map(_*2)
newList: List[Int] = List(2, 4, 6, 8, 10, 12)

2.2 Set集合

scala> val ss = Set(1,2,1)
ss: scala.collection.immutable.Set[Int] = Set(1, 2)

注意: Set集合中不存在重复元素,如果有重复元素则会去掉重复的元素

2.3 Tuple集合

2.3.1 创建Tuple集合

操作1: 创建普通Tuple集合

scala> val hostPort=("localhost","8080")
hostPort: (String, String) = (localhost,8080)

scala> hostPort._1
res6: String = localhost

scala> hostPort._2
res7: String = 8080

注意: Tuple集合中可以放置不同类型的元素;

​ Tuple集合中的元素访问是从下标1开始访问的;

操作2: 创建2个元素的Tuple集合

scala> "a"->"b"
res8: (String, String) = (a,b)

2.3.2 赋值操作

scala> val tuple = (1,2,3,4,"lubin","spark")
tuple: (Int, Int, Int, Int, String, String) = (1,2,3,4,lubin,spark)

scala> val (first,second,third,fourth,fifth,six)=tuple
first: Int = 1
second: Int = 2
third: Int = 3
fourth: Int = 4
fifth: String = lubin
six: String = spark

注意: 上面tuple的长度必须与接收的元组长度一致,否则报错

scala> val (f1,f2,_,_,_,_)=tuple
f1: Int = 1
f2: Int = 2

注意: 上述占位符”_”表示此位置不需要赋值

scala> "Spark Hadoop".partition(_.isUpper)
res10: (String, String) = (SH,park adoop)

注意: partition函数的参数为一个布尔表达式函数,判断字符串中的字符是否为大写;最后将大写字符组合为一个字符串,非大写字符组合为一个字符串形成元组

2.4 Map集合

2.4.1 创建Map集合

操作1: 创建immutable类型Map

scala> Map("a"->"b","lubin"->"10000")
res11: scala.collection.immutable.Map[String,String] = Map(a -> b, lubin -> 10000)

注意: 创建Map使用的可变参数方式;

​ 创建的 Map默认是immutable类型

操作2: 创建mutable类型Map

scala> val map = scala.collection.mutable.Map("apple"->7,"spark"->8)
map: scala.collection.mutable.Map[String,Int] = Map(spark -> 8, apple -> 7)

2.5 Option类型

Option类型表示一个值是可选的(有值或无值)

Option[T] 是一个类型为 T 的可选值的容器: 如果值存在,Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。

scala> val map = Map("key1"->"spark","key2"->100)
map: scala.collection.immutable.Map[String,Any] = Map(key1 -> spark, key2 -> 100
)

scala> val value1 = map.get("key1")
value1: Option[Any] = Some(spark)

scala> val value2 = map.get("key2")
value2: Option[Any] = Some(100)

scala> val value3 = map.get("key3")
value3: Option[Any] = None

使用getOrElse() 函数来获取Option中的值,如果有值,则返回实际值,没有则返回默认值

scala> value2.getOrElse(0)
res14: Any = 100

scala> value3.getOrElse(0)
res15: Any = 0

2.6 filter操作

scala> val list = List(1,2,3,4,5)
list: List[Int] = List(1, 2, 3, 4, 5)

scala> list.filter(x=>x%2==0)
res16: List[Int] = List(2, 4)

注意: filter函数接受一个boolean表达式,作用为过滤出满足布尔条件的值组成的集合;顺序与原来一致;

2.7 zip操作

scala> val a=List(1,2,3)
a: List[Int] = List(1, 2, 3)

scala> val b = List(4,5,6)
b: List[Int] = List(4, 5, 6)

scala> a zip b
res17: List[(Int, Int)] = List((1,4), (2,5), (3,6))

注意: a zip b 可以写成a.zip(b)

scala> val a=List(1,2,3)
a: List[Int] = List(1, 2, 3)

scala> val b = List(1,2,3,4)
b: List[Int] = List(1, 2, 3, 4)

scala> a zip b
res18: List[(Int, Int)] = List((1,1), (2,2), (3,3))
scala> val array = Array("[","-","]")
array: Array[String] = Array([, -, ])

scala> val nums = Array(2,5,6)
nums: Array[Int] = Array(2, 5, 6)

scala> val pairs = array.zip(nums)
pairs: Array[(String, Int)] = Array(([,2), (-,5), (],6))

scala> for((x,y)<-pairs) print(x*y)
[[-----]]]]]]

注意: 字符串与数字相乘,结果:字符串复制了该数字的倍数

2.8 partition操作

scala> val list = List(1,2,3,4,5,6,7,8,9,10)
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> list.partition(_%2==0)
res21: (List[Int], List[Int]) = (List(2, 4, 6, 8, 10),List(1, 3, 5, 7, 9))

注意: partition函数的参数为一个布尔表达式,返回值为两个集合,第一个集合为满足布尔表达式的值组成的集合,第二个集合为不满足布尔表达式的值组成的集合;两个集合中元素的顺序与原来保持一致。

2.9 flatten操作

scala> val list = List(List("a","b"),List("cc","dd"))
list: List[List[String]] = List(List(a, b), List(cc, dd))

scala> list.flatten
res22: List[String] = List(a, b, cc, dd)

2.10 flatMap操作

map和flatten操作的结合,先进行map操作,然后进行flatten操作

scala> val list = List(List("a","b"),List("cc","dd"))
list: List[List[String]] = List(List(a, b), List(cc, dd))

scala> list.flatMap(x=>x.map(_*2))
res24: List[String] = List(aa, bb, cccc, dddd)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值