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

目录

一、知识回顾

二、集合

1.List

a.字符串列表

b.整形

c.::Nil

2.set

 a.set创建

b.set操作

c.遍历set

3.map

三、元组

拓展-集合方法

 1.List集合方法

2.set集合方法 

3.map集合方法


一、知识回顾

在上一篇文章中,我们讲了如和创建一个无参,带参以及匿名函数。

无参并不难理解,直接定义直接输出。

带参函数多注重调用方法

 

匿名函数就要花心思去理解了,但多实操,也肯定能搞懂。

那么,开启今天的学习吧。 

二、集合

scala中,集合分为三大类: List、set以及Map

现在,我们逐个讲解。

1.List

在Scala中,List是一种常用的不可变集合。它代表了一个有序的元素集合,你可以通过索引访问其元素,并且其大小是固定的。由于它是不可变的,所以一旦创建,就不能改变其内容(如添加或删除元素)。

如果要定义可变列表,需要导入 import scala.collection.mutable.ListBuffer

a.字符串列表

可以看到,我定义了一个类型为List的字符串集合,并赋给了他"apples", "oranges", "pears"三个字符串,现在我们来运行以下我们的代码看看效果。

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

package com.tipdm.scalaDemoobject p3 {def main(args: Array[String]): Unit = {val  p1: List[String]= List("apples", "oranges", "pears")println(p1)}}

b.整形

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

package com.tipdm.scalaDemoobject 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.scalaDemoobject p4 {def main(args: Array[String]): Unit = {val p1 = Set(1, 2, 3, 4) val newp1= p1 + 5newp1.foreach(println)}
}

3.map

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

创建map,输出map

那该怎么输出呢?

可以通过键来访问Map中的值,也可以直接打印,还可以用for遍历输出

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

package com.tipdm.scalaDemoobject 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.scalaDemoobject p4 {def main(args: Array[String]): Unit = {val p1 = (1, "Hello", true, 3.14)println(p1)val s1 = p1._1println(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中的每个值应用函数,返回新的Mapval 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 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/284214.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础:TCP四次挥手做了什么,为什么要挥手?

1. TCP 四次挥手在做些什么 1. 第一次挥手 &#xff1a; 1&#xff09;挥手作用&#xff1a;主机1发送指令告诉主机2&#xff0c;我没有数据发送给你了。 2&#xff09;数据处理&#xff1a;主机1&#xff08;可以是客户端&#xff0c;也可以是服务端&#xff09;&#xff0c…

LM studio使用gemmar聊天小试

通过LM studio可以方便的使用各种模型&#xff0c;使用LM提供的chat界面或者是使用python代码。 试试代码 在windows下使用python简单一试&#xff0c;例子直接复制LM界面上的代码&#xff1a; 用pip安装 openai包在LM界面 Start Server 需要安装 openai包。 本地电脑是I7…

图像处理ASIC设计方法 笔记12 图像旋转ASIC中心控制器状态机

P109 1 流水线图像旋转ASIC整体架构 中心控制器负责各个模块的状态控制和数据调度,接收到外部启动信号后,进人芯片初始化阶段,片上FIFO接收外部输入的图像旋转参数、接收完毕后,再利用接收到的旋转角度到查找表中找到对应的正弦和正切值。 中心控制器将接收到的行列信息…

计算机网络——26通用转发和SDN

通用转发和SDN 网络层功能&#xff1a; 转发&#xff1a; 对于从某个端口 到来的分组转发到合适的 输出端口路由&#xff1a; 决定分组从源端 到目标端的路径 网络层 传统路由器的功能 每个路由器(Per Route)的控制平面 &#xff08;传统&#xff09; 每个路由器上都有实…

阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_tokenHMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY 导读&#xff1a;本文总结了熟悉系统主要分三部分&#xff1a;业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题&#xff0c;这些问题…

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性&#xff1f; 首先分离属性是线程的一个属性&#xff0c;有了分离属性的线程&#xff0c;不需要别的线程去接合…

STM32---DHT11温湿度传感器与BH1750FVI光照传感器(HAL库、含源码)

写在前面&#xff1a;本节我们学习使用两个常见的传感器模块&#xff0c;分别为DHT11温湿度传感器以及BH1750FVI光照传感器,这两种传感器在对于环境监测中具有十分重要的作用&#xff0c;因为其使用简单方便&#xff0c;所以经常被用于STM32的项目之中。今天将使用分享给大家&a…

相交链表:寻找链表的公共节点

目录 一、公共节点 二、题目 三、思路 四、代码 五、代码解析 1.计算长度 2.等长处理 3.判断 六、注意点 1.leetcode的尿性 2.仔细观察样例 3.经验总结 一、公共节点 链表不会像两直线相交一样&#xff0c;相交之后再分开。 由于单链表只有一个next指针&#xff0…

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点&#xff0c;可以向总线发送数据和接收数据。 静默模式 静默模式下&#xff0c;它自己的输出端的逻辑0数据会直接传输到它自己的输入端&#xff0c;逻辑1可以被发送到总线&#xff0c;所以它不能向总线发送显性…

FANUC机器人零点标定的基本步骤(出厂数据)

FANUC机器人零点标定的基本步骤(出厂数据) FANUC 零点数据存在问题的机器人通常会出现以下几种报警: (1)SRVO-062报警 - 脉冲编码器数据丢失,机器人完全不能动,具体消除方法可参考以下链接中的内容: FANUC机器人SRVO-062报警原因分析及处理对策 (2)SRVO-075报警 -…

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会

会议背景 随着全球对清洁能源的迫切需求&#xff0c;氢能能源转型、工业应用、交通运输等方面具有广阔前景&#xff0c;氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示&#xff0c;到2050年&#xff0c;绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…

Hive SQL必刷练习题:排列组合问题【通过join不等式】

排列组合问题【通过join不等式】 这种问题&#xff0c;就是数学的排列不等式&#xff0c;一个队伍只能和其余队伍比一次&#xff0c;不能重复 方法1&#xff1a;可以直接通过join&#xff0c;最后on是一个不等式【排列组合问题的解决方式】 方法2&#xff1a;也可以是提前多加…

Docker安装配置

1. 安装docker-ce sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce sudo systemctl enable docker 2. 设置代理 参照&#xff1a;https://docs.docker.com/config/daemon/systemd/#httpht…

【Flask】Flask数据迁移操作

Flask数据迁移操作 前提条件 安装第三方包&#xff1a; # ORM pip install flask-sqlalchemy # 数据迁移 pip install flask-migrate # MySQL驱动 pip install pymysql # 安装失败&#xff0c;指定如下镜像源即可 # pip install flask-sqlalchemy https://pypi.tuna.tsinghu…

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域

【大屏设计】如何进行软件系统网站大屏页面设计&#xff1f;不限于智慧城市、物联网、电商、园区领域 一、什么是网站大屏设计二、网站大屏设计原型素材三、网站大屏设计设计素材四、他山之石 一、什么是网站大屏设计 网站大屏设计是网站设计中至关重要的一部分&#xff0c;因…

Webman全局异常捕获处理

最近在使用webman这个框架做项目开发&#xff0c;涉及到需要统一处理异常捕获。由于官网给的并不详细&#xff0c;于是自己实现了一下全局异常处理类。 一、配置效果 例如&#xff1a;我要在项目中统一返回json 格式数据&#xff0c;并不想在业务层写try,catch逻辑。 或者在业务…

查看文件内容的指令:cat,tac,nl,more,less,head,tail,写入文件:echo

目录 cat 介绍 输入重定向 选项 -b -n -s tac 介绍 输入重定向 nl 介绍 示例 more 介绍 选项 less 介绍 搜索文本 选项 head 介绍 示例 选项 -n tail 介绍 示例 选项 echo 介绍 输出重定向 追加重定向 cat 介绍 将标准输入(键盘输入)的内容打…

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库&#xff0c;开发于二十多年前。它提供了一个低级API&#xff0c;允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时&#xff0c;它是首选平台。它可以在…

SQLiteC/C++接口详细介绍sqlite3_stmt类(五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;四&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;六&#xff09; 12. sqlite3_bind_text16函数 sqlite3_bind_text16函数用…

深入理解MySQL中的JOIN算法

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、引言二、嵌套循环连接&#xff08;Nested-Loop Join&#xff09;2.1 工作原理2.2 性能考虑2.3 优化策略 三、块嵌套循环…