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.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中的每个值应用函数,返回新的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 }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 下载依赖包源码报错 Cannot download sources Sources not found for:XXX

最近在做一个功能的时候想看一个库的源码&#xff0c;结果源码下不下来&#xff0c;报Cannot download sources Sources not found for:XXX,网上搜了半天&#xff0c;也找不到靠谱的结论 后来想了下&#xff0c;应该是镜像那边出了问题&#xff0c;把镜像一删&#xff0c;源码…

航空实时监控

1、从Kafka中读取飞机数据&#xff0c;并进行清洗 此步骤在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段应该已经完成。如果没有完成&#xff0c;请参考源代码自行完成。核心类主要有三个&#xff1a;SparkStreamingApplication类、SparkUtil类和MapManager类…

免费PDF转换和编辑工具 PDFgear 2.1.4

PDFgear是一款功能强大的 PDF 阅读及转换软件。 它支持多种文件格式的转换和编辑&#xff0c;同时还提供了丰富的功能模块&#xff0c;如签名、表单填写等&#xff0c;方便用户进行多样化的操作。 该软件界面简洁美观&#xff0c;操作简单易懂&#xff0c;适合不同层次的用户…

从零到一构建短链接系统(八)

1.git上传远程仓库&#xff08;现在才想起来&#xff09; git init git add . git commit -m "first commit" git remote add origin OLiyscxm/shortlink git push -u origin "master" 2.开发全局异常拦截器之后就可以简化UserController 拦截器可以…

ASP .Net Core 配置集合 IConfiguration 的使用

&#x1f433;简介 IConfiguration 是 ASP.NET Core 中的一个接口&#xff0c;用于表示配置集合。以下是关于 IConfiguration 的详细介绍&#xff1a; 作用&#xff1a;IConfiguration 允许开发人员从各种来源&#xff08;如文件、环境变量、命令行参数等&#xff09;读取应用…

linux 命令笔记:gpustat

1 命令介绍 gpustat是一个基于Python的命令行工具&#xff0c;它提供了一种快速、简洁的方式来查看GPU的状态和使用情况它是nvidia-smi工具的一个封装&#xff0c;旨在以更友好和易于阅读的格式显示GPU信息。gpustat不仅显示基本的GPU状态&#xff08;如温度、GPU利用率和内存…

软考高级:软件架构风格-虚拟机风格概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

ubuntu部署wireguard服务端,ubuntu部署wireguard客户端

docker部署方式 docker run -d \--namewg-easy \-e WG_HOST6.6.6.6服务端IP \-e PASSWORD123abc登陆管理密码 \-e WG_DEFAULT_ADDRESS10.0.8.x客户端 IP 地址范围 \-e WG_DEFAULT_DNS1.1.1.1配置dns \-e WG_ALLOWED_IPS10.0.8.0/24 \-e WG_PERSISTENT_KEEPALIVE25 \-v ~/.wg-e…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

【ChatGLM3-6B】本地大模型使用方法详细教程!!!内含详细的代码解析!!

ChatGLM3介绍 ChatGLM3 是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。 ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示&#xff0c;Ch…

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用

目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…

[Qt学习笔记]Qt使用MFC编译生成dll库在无编程环境电脑出现无法加载dll的问题

目录 1、 问题介绍2、 问题分析3、 问题总结和思考 1、 问题介绍 在项目实践中&#xff0c;使用Qt调用了一个vs创建的dll库&#xff0c;在本机上编译和release后的exe可以加载对应的dll文件&#xff0c;将exe拷贝到有vs编程环境的电脑上也可以加载对应的dll文件&#xff0c;但…

Maven Deploy测试

文章目录 Maven环境deployreleaseRepo Manager演示 RefFAQ Maven 环境 jdk8maven v3.9.5 deploy mvn install将jar存到localRepository&#xff0c;mvn deploy把jar推送到远程仓库&#xff0c;然后可以像central库那样下载依赖。 release 基于git执行项目发版流程&#x…

ab (Apache benchmark) - 压力/性能测试工具

Apache benchmark&#xff08;ab&#xff09; 安装window安装使用方法 - bin目录运行使用方法 - 任意目录运行 linux安装 基本命令介绍常用参数:输出结果分析&#xff1a; ab的man手册 安装 window安装 官网下载链接&#xff1a;https://www.apachehaus.com/cgi-bin/download…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.Chip(操作块组件)

操作块&#xff0c;用于搜索框历史记录或者邮件发送列表等场景。 说明&#xff1a; 该组件从API Version 11开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 Chip Chip({options:ChipOptions}) 装饰器类型&#xff1a;Builde…

软考高级:软件架构风格-数据流风格概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

用户登录项目JAVA简单实现

1、“zhangsan”.equals&#xff08;userName&#xff09; 把常量放在前面是为了防止空指针、 2、session不用我们担心会不会空指针&#xff0c;如果为null会为我们创建个空的session 3、网页清缓存 &#xff08;1&#xff09;ctrlF5 &#xff08;2&#xff09;ctrlshiftdel…

FPGA学习_时序分析

文章目录 前言一、组合逻辑与时序逻辑二、建立时间和保持时间三、建立时间和保持时间 前言 心中有电路&#xff0c;下笔自然神&#xff01;&#xff01;&#xff01; 一、组合逻辑与时序逻辑 组合逻辑&#xff1a;没有时钟控制的数字电路&#xff0c;代码里的判断逻辑都是组…

浅析扩散模型与图像生成【应用篇】(九)——UNIT-DDPM

10. UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models 该文提出一种基于DDPM的非配对的图像转换方法&#xff0c;称为UNIT-DDPM&#xff0c;能够实现源域的图像到目标域图像的转换&#xff0c;在保留原有图像内容的同时&#xff0c;转换为…

现货黄金做对冲的具体方法

现货黄金做对冲的具体方法是运用金融衍生工具和策略&#xff0c;以减轻或消除持有现货黄金所面临的市场风险。具体而言&#xff0c;投资者可通过期货合约、期权、掉期等金融工具来实现对冲&#xff0c;保障其投资价值不受金价波动的负面影响。 &#xfeff; 期货合约在对冲中…