在之前的文章中,我们学习了如何在scala中定义无参,带参以及匿名函数。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
Spark-Scala语言实战(3)-CSDN博客文章浏览阅读654次,点赞19次,收藏14次。今天我会给大家带来如何在Scala中使用函数,了解函数。望在本篇文章中,大家有所收获。也欢迎朋友们到评论区下一起交流学习,共同进步。https://blog.csdn.net/qq_49513817/article/details/136839079?spm=1001.2014.3001.5501
一、知识回顾
在上一篇文章中,我们讲了如和创建一个无参,带参以及匿名函数。
无参并不难理解,直接定义直接输出。
带参函数多注重调用方法
匿名函数就要花心思去理解了,但多实操,也肯定能搞懂。
那么,开启今天的学习吧。
二、集合
scala中,集合分为三大类: List、set以及Map
现在,我们逐个讲解。
1.List
在Scala中,List是一种常用的不可变集合。它代表了一个有序的元素集合,你可以通过索引访问其元素,并且其大小是固定的。由于它是不可变的,所以一旦创建,就不能改变其内容(如添加或删除元素)。
如果要定义可变列表,需要导入 import scala.collection.mutable.ListBuffer 包
a.字符串列表
可以看到,我定义了一个类型为List的字符串集合,并赋给了他"apples", "oranges", "pears"三个字符串,现在我们来运行以下我们的代码看看效果。
运行成功,输出了我们赋予的东西。
package com.tipdm.scalaDemo
object p3 {
def main(args: Array[String]): Unit = {
val p1: List[String]= List("apples", "oranges", "pears")
println(p1)
}
}
b.整形
和上面的区别不大,仅仅改了赋予值的数据类型而已,现在运行试试。
package com.tipdm.scalaDemo
object p3 {
def main(args: Array[String]): Unit = {
val p1 = List(11, 22, 33)
println(p1)
}
}
c.::Nil
在scala中,可以使用“Nil”和“::”操作符来定义列表
可以看到,我们并没有定义p1的类型,只是在数值后面加上了::Nil,那输出会是什么呢?
显而易见,我放到这里,那肯定是List,那为什么会这样呢?
Nil代表一个空的List,它是List的结束标记。使用
::
操作符可以将元素添加到List的前面。 在之前的文章中,我也说过了,这也是Scala的语言的特点,它会自己识别,这正是Scala语言灵活的体现。
2.set
a.set创建
在Scala中,Set是一种不可变的集合,它包含的元素是唯一的,也就是说它不允许有重复的元素。Scala 使用不可变Set集合,若想使用可变的Set集合则需要引入 scala.collection.mutable.Set包。
在运用scala.collection.mutable.Set包创建一个可变集合后,重复元素会直接强制降重,我们来看下输出。
可以看到p2原先的值应该是1,2,2,3,3。现在输出直接变成1,2,3了,它完成了一个降重工作。
b.set操作
你可以使用
+
和
-
操作符来添加和删除元素
来看看输出。
对于不可变的
Set
,添加或删除元素会返回一个新的
Set
,而原始的
Set
不会被改变。对于可变的
Set
,添加或删除元素会修改原来的
Set
。
c.遍历set
在Scala中,我们可以使用
foreach
方法来遍历
Set
中的元素
输出看看
咱们的newp1被遍历输出了。
package com.tipdm.scalaDemo
object p4 {
def main(args: Array[String]): Unit = {
val p1 = Set(1, 2, 3, 4)
val newp1= p1 + 5
newp1.foreach(println)
}
}
3.map
在Scala中,Map是一种可迭代的键值对(key/value)结构集合,并且键在Map中是唯一的。
创建map,输出map
那该怎么输出呢?
可以通过键来访问
Map
中的值,也可以直接打印,还可以用for遍历输出
三种方法,我们来看下输出效果
package com.tipdm.scalaDemo
object p4 {
def main(args: Array[String]): Unit = {
val p1 = Map("one" -> 1, "two" -> 2, "three" -> 3)
val p2 = p1("one")
println(p2)
println(p1)
for ((key, value) <- p1) {
println(s"$key -> $value")
}
}
}
三、元组
在Scala中,元组(Tuple)是一种固定大小的有序集合,可以包含不同类型的元素。元组是轻量级的,用于将多个项组合成一个单一的对象,而不必创建自定义的类。
val p1 = (1, "Hello")
这是两种元素的元组
val p2 = (1, "Hello", true, 3.14)
这是四种元素的元组
在元组中,我们可以通过使用下划线
_1
、
_2
、
_3
等来访问元组中的元素,其中数字表示元素的位置(从1开始)。也可以直接打印。
来看看运行效果
可以看到_1下的元素1被成功赋给了s1
package com.tipdm.scalaDemo
object p4 {
def main(args: Array[String]): Unit = {
val p1 = (1, "Hello", true, 3.14)
println(p1)
val s1 = p1._1
println(s1)
}
}
拓展-集合方法
1.List集合方法
方法名描述示例
:::
连接两个或多个列表
val list1 = List(1, 2, 3); val list2 = List(4, 5, 6); val result = list1 ::: list2
+:
或
::
在列表开头添加元素
val list = 1 :: (2 :: (3 :: Nil))
isEmpty
判断列表是否为空
val list = List(); val isEmpty = list.isEmpty
head
获取列表的第一个元素
val list = List(1, 2, 3); val firstElement = list.head
tail
获取列表除第一个元素外的其余部分
val list = List(1, 2, 3); val rest = list.tail
take(n)
取出列表的前n个元素
val list = List(1, 2, 3, 4, 5); val taken = list.take(3)
takeRight(n)
取出列表的后n个元素
val list = List(1, 2, 3, 4, 5); val takenRight = list.takeRight(2)
drop(n)
删除列表的前n个元素
val list = List(1, 2, 3, 4, 5); val dropped = list.drop(2)
dropRight(n)
删除列表的后n个元素
val list = List(1, 2, 3, 4, 5); val droppedRight = list.dropRight(2)
filter(predicate)
过滤出符合条件的元素
val list = List(1, 2, 3, 4, 5); val filtered = list.filter(_ % 2 == 0)
indexOf(element, [from])
从指定位置开始查找元素的索引
val list = List(1, 2, 3, 4, 5); val index = list.indexOf(3)
intersect(other)
计算两个集合的交集
val list1 = List(1, 2, 3); val list2 = List(2, 3, 4); val intersection = list1.intersect(list2)
length
返回列表的长度
val list = List(1, 2, 3, 4, 5); val length = list.length
mkString([sep])
将列表元素转换为字符串,可以用指定的分隔符
val list = List(1, 2, 3); val str = list.mkString(", ")
toArray
将列表转换为数组
val list = List(1, 2, 3); val array = list.toArray
sorted
对列表进行排序,默认为升序
val list = List(3, 1, 4, 1, 5, 9); val sortedList = list.sorted
2.set集合方法
方法名描述示例
+
或
++=
向集合中添加元素
val set = Set(1, 2, 3); set += 4
-
或
--=
从集合中移除元素
val set = Set(1, 2, 3, 4); set -= 3
contains
检查集合是否包含某元素
val set = Set(1, 2, 3); val isContained = set.contains(2)
isEmpty
判断集合是否为空
val set = Set(); val isEmpty = set.isEmpty
size
返回集合的元素数量
val set = Set(1, 2, 3); val size = set.size
intersect
计算两个集合的交集
val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val intersection = set1.intersect(set2)
diff
或
--
计算两个集合的差集
val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val diff = set1.diff(set2)
union
或
++
计算两个集合的并集
val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val union = set1.union(set2)
subsetOf
判断一个集合是否为另一个集合的子集
val set1 = Set(1, 2); val set2 = Set(1, 2, 3); val isSubset = set1.subsetOf(set2)
filter
过滤出符合条件的元素
val set = Set(1, 2, 3, 4, 5); val filtered = set.filter(_ % 2 == 0)
foreach
遍历集合中的每个元素并执行操作
val set = Set(1, 2, 3); set.foreach(println)
mkString
将集合元素转换为字符串,可用指定的分隔符
val set = Set(1, 2, 3); val str = set.mkString(", ")
3.map集合方法
方法名描述示例
+
或
++=
向Map中添加键值对
val map = Map("a" -> 1); map += ("b" -> 2)
-
或
--=
从Map中移除键值对
val map = Map("a" -> 1, "b" -> 2); map -= "a"
get
根据键获取对应的值(返回Option类型)
val map = Map("a" -> 1); val value = map.get("a")
contains
检查Map是否包含某个键
val map = Map("a" -> 1); val isContained = map.contains("a")
isEmpty
判断Map是否为空
val map = Map(); val isEmpty = map.isEmpty
size
返回Map中的键值对数量
val map = Map("a" -> 1, "b" -> 2); val size = map.size
keys
获取Map中所有的键
val map = Map("a" -> 1, "b" -> 2); val keys = map.keys
values
获取Map中所有的值
val map = Map("a" -> 1, "b" -> 2); val values = map.values
foreach
遍历Map中的每个键值对并执行操作
val map = Map("a" -> 1, "b" -> 2); map.foreach { case (key, value) => println(s"$key -> $value") }
mapValues
对Map中的每个值应用函数,返回新的Map
val map = Map("a" -> 1, "b" -> 2); val newMap = map.mapValues(_ * 2)
filterKeys
根据键的条件过滤Map中的键值对
val map = Map("a" -> 1, "b" -> 2); val filtered = map.filterKeys(_ == "a")
filter
或
withFilter
根据键值对的条件过滤Map中的键值对
val map = Map("a" -> 1, "b" -> 2); val filtered = map.filter { case (key, value) => value > 1 }
版权归原作者 Peng0426. 所有, 如有侵权,请联系我们删除。