0


Spark-Scala语言实战(4)

在之前的文章中,我们学习了如何在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"三个字符串,现在我们来运行以下我们的代码看看效果。

运行成功,输出了我们赋予的东西。

  1. package com.tipdm.scalaDemo
  2. object p3 {
  3. def main(args: Array[String]): Unit = {
  4. val p1: List[String]= List("apples", "oranges", "pears")
  5. println(p1)
  6. }
  7. }

b.整形

和上面的区别不大,仅仅改了赋予值的数据类型而已,现在运行试试。

  1. package com.tipdm.scalaDemo
  2. object p3 {
  3. def main(args: Array[String]): Unit = {
  4. val p1 = List(11, 22, 33)
  5. println(p1)
  6. }
  7. }

c.::Nil

在scala中,可以使用“Nil”和“::”操作符来定义列表

可以看到,我们并没有定义p1的类型,只是在数值后面加上了::Nil,那输出会是什么呢?

显而易见,我放到这里,那肯定是List,那为什么会这样呢?

Nil代表一个空的List,它是List的结束标记。使用

  1. ::

操作符可以将元素添加到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操作

你可以使用

  1. +

  1. -

操作符来添加和删除元素

来看看输出。

对于不可变的

  1. Set

,添加或删除元素会返回一个新的

  1. Set

,而原始的

  1. Set

不会被改变。对于可变的

  1. Set

,添加或删除元素会修改原来的

  1. Set

c.遍历set

在Scala中,我们可以使用

  1. foreach

方法来遍历

  1. Set

中的元素

输出看看

咱们的newp1被遍历输出了。

  1. package com.tipdm.scalaDemo
  2. object p4 {
  3. def main(args: Array[String]): Unit = {
  4. val p1 = Set(1, 2, 3, 4)
  5. val newp1= p1 + 5
  6. newp1.foreach(println)
  7. }
  8. }

3.map

在Scala中,Map是一种可迭代的键值对(key/value)结构集合,并且键在Map中是唯一的。

创建map,输出map

那该怎么输出呢?

可以通过键来访问

  1. Map

中的值,也可以直接打印,还可以用for遍历输出

三种方法,我们来看下输出效果

  1. package com.tipdm.scalaDemo
  2. object p4 {
  3. def main(args: Array[String]): Unit = {
  4. val p1 = Map("one" -> 1, "two" -> 2, "three" -> 3)
  5. val p2 = p1("one")
  6. println(p2)
  7. println(p1)
  8. for ((key, value) <- p1) {
  9. println(s"$key -> $value")
  10. }
  11. }
  12. }

三、元组

在Scala中,元组(Tuple)是一种固定大小的有序集合,可以包含不同类型的元素。元组是轻量级的,用于将多个项组合成一个单一的对象,而不必创建自定义的类。

  1. val p1 = (1, "Hello")

这是两种元素的元组

  1. val p2 = (1, "Hello", true, 3.14)

这是四种元素的元组

在元组中,我们可以通过使用下划线

  1. _1

  1. _2

  1. _3

等来访问元组中的元素,其中数字表示元素的位置(从1开始)。也可以直接打印。

来看看运行效果

可以看到_1下的元素1被成功赋给了s1

  1. package com.tipdm.scalaDemo
  2. object p4 {
  3. def main(args: Array[String]): Unit = {
  4. val p1 = (1, "Hello", true, 3.14)
  5. println(p1)
  6. val s1 = p1._1
  7. println(s1)
  8. }
  9. }

拓展-集合方法

1.List集合方法

方法名描述示例

  1. :::

连接两个或多个列表

  1. val list1 = List(1, 2, 3); val list2 = List(4, 5, 6); val result = list1 ::: list2
  1. +:

  1. ::

在列表开头添加元素

  1. val list = 1 :: (2 :: (3 :: Nil))
  1. isEmpty

判断列表是否为空

  1. val list = List(); val isEmpty = list.isEmpty
  1. head

获取列表的第一个元素

  1. val list = List(1, 2, 3); val firstElement = list.head
  1. tail

获取列表除第一个元素外的其余部分

  1. val list = List(1, 2, 3); val rest = list.tail
  1. take(n)

取出列表的前n个元素

  1. val list = List(1, 2, 3, 4, 5); val taken = list.take(3)
  1. takeRight(n)

取出列表的后n个元素

  1. val list = List(1, 2, 3, 4, 5); val takenRight = list.takeRight(2)
  1. drop(n)

删除列表的前n个元素

  1. val list = List(1, 2, 3, 4, 5); val dropped = list.drop(2)
  1. dropRight(n)

删除列表的后n个元素

  1. val list = List(1, 2, 3, 4, 5); val droppedRight = list.dropRight(2)
  1. filter(predicate)

过滤出符合条件的元素

  1. val list = List(1, 2, 3, 4, 5); val filtered = list.filter(_ % 2 == 0)
  1. indexOf(element, [from])

从指定位置开始查找元素的索引

  1. val list = List(1, 2, 3, 4, 5); val index = list.indexOf(3)
  1. intersect(other)

计算两个集合的交集

  1. val list1 = List(1, 2, 3); val list2 = List(2, 3, 4); val intersection = list1.intersect(list2)
  1. length

返回列表的长度

  1. val list = List(1, 2, 3, 4, 5); val length = list.length
  1. mkString([sep])

将列表元素转换为字符串,可以用指定的分隔符

  1. val list = List(1, 2, 3); val str = list.mkString(", ")
  1. toArray

将列表转换为数组

  1. val list = List(1, 2, 3); val array = list.toArray
  1. sorted

对列表进行排序,默认为升序

  1. val list = List(3, 1, 4, 1, 5, 9); val sortedList = list.sorted

2.set集合方法

方法名描述示例

  1. +

  1. ++=

向集合中添加元素

  1. val set = Set(1, 2, 3); set += 4
  1. -

  1. --=

从集合中移除元素

  1. val set = Set(1, 2, 3, 4); set -= 3
  1. contains

检查集合是否包含某元素

  1. val set = Set(1, 2, 3); val isContained = set.contains(2)
  1. isEmpty

判断集合是否为空

  1. val set = Set(); val isEmpty = set.isEmpty
  1. size

返回集合的元素数量

  1. val set = Set(1, 2, 3); val size = set.size
  1. intersect

计算两个集合的交集

  1. val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val intersection = set1.intersect(set2)
  1. diff

  1. --

计算两个集合的差集

  1. val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val diff = set1.diff(set2)
  1. union

  1. ++

计算两个集合的并集

  1. val set1 = Set(1, 2, 3); val set2 = Set(2, 3, 4); val union = set1.union(set2)
  1. subsetOf

判断一个集合是否为另一个集合的子集

  1. val set1 = Set(1, 2); val set2 = Set(1, 2, 3); val isSubset = set1.subsetOf(set2)
  1. filter

过滤出符合条件的元素

  1. val set = Set(1, 2, 3, 4, 5); val filtered = set.filter(_ % 2 == 0)
  1. foreach

遍历集合中的每个元素并执行操作

  1. val set = Set(1, 2, 3); set.foreach(println)
  1. mkString

将集合元素转换为字符串,可用指定的分隔符

  1. val set = Set(1, 2, 3); val str = set.mkString(", ")

3.map集合方法

方法名描述示例

  1. +

  1. ++=

向Map中添加键值对

  1. val map = Map("a" -> 1); map += ("b" -> 2)
  1. -

  1. --=

从Map中移除键值对

  1. val map = Map("a" -> 1, "b" -> 2); map -= "a"
  1. get

根据键获取对应的值(返回Option类型)

  1. val map = Map("a" -> 1); val value = map.get("a")
  1. contains

检查Map是否包含某个键

  1. val map = Map("a" -> 1); val isContained = map.contains("a")
  1. isEmpty

判断Map是否为空

  1. val map = Map(); val isEmpty = map.isEmpty
  1. size

返回Map中的键值对数量

  1. val map = Map("a" -> 1, "b" -> 2); val size = map.size
  1. keys

获取Map中所有的键

  1. val map = Map("a" -> 1, "b" -> 2); val keys = map.keys
  1. values

获取Map中所有的值

  1. val map = Map("a" -> 1, "b" -> 2); val values = map.values
  1. foreach

遍历Map中的每个键值对并执行操作

  1. val map = Map("a" -> 1, "b" -> 2); map.foreach { case (key, value) => println(s"$key -> $value") }
  1. mapValues

对Map中的每个值应用函数,返回新的Map

  1. val map = Map("a" -> 1, "b" -> 2); val newMap = map.mapValues(_ * 2)
  1. filterKeys

根据键的条件过滤Map中的键值对

  1. val map = Map("a" -> 1, "b" -> 2); val filtered = map.filterKeys(_ == "a")
  1. filter

  1. withFilter

根据键值对的条件过滤Map中的键值对

  1. val map = Map("a" -> 1, "b" -> 2); val filtered = map.filter { case (key, value) => value > 1 }

本文转载自: https://blog.csdn.net/qq_49513817/article/details/136881756
版权归原作者 Peng0426. 所有, 如有侵权,请联系我们删除。

“Spark-Scala语言实战(4)”的评论:

还没有评论