大数据scala学习—列表集与映射

黑马程序员官方 黑马程序员官方     2023-02-22     145

关键词:

▼Scala系列学习笔记:

  1. Scala概述与开发环境配置
  2. Scala基础学习之运算符
  3. Scala基础学习之for循环和while循环
  4. 一文掌握scala中的方法和函数
  5. Scala基础:类和对象、访问修饰符和构造器
  6. Scala的继承和抽象类
  7. Scala基础语法之Trait详解
  8. Scala学习之数组与元组

一、列表

列表(List)是Scala中最重要的, 也是最常用的一种数据结构。它存储的数据, 特点是: 有序, 可重复。
在Scala中,列表分为两种, 即: 不可变列表和可变列表。

解释:

1. 有序 的意思并不是排序, 而是指 元素的存入顺序和取出顺序是一致的
2. 可重复 的意思是 列表中可以添加重复元素

1.1 不可变列表

1.1.1 特点

不可变列表指的是: 列表的元素、长度都是不可变的。 

1.1.2 语法

1.2.2 示例

需求

1. 创建一个不可变列表,存放以下几个元素(1,2,3,4)
2. 使用 Nil 创建一个不可变的空列表
3. 使用 :: 方法创建列表,包含-2、-1两个元素 

参考代码

1.2 可变列表

1.2.1 特点

可变列表指的是列表的元素、长度都是可变的.

1.2.2 语法

1.2.3 示例

需求

1. 创建空的整形可变列表.
2. 创建一个可变列表,包含以下元素:1,2,3,4

参考代码 

 

1.2.4 可变列表的常用操作

关于可变列表的常见操作如下: 

示例

1. 定义一个可变列表包含以下元素:1,2,3
2. 获取第一个元素, 并打印结果到控制台.
3. 添加一个新的元素:4
4. 追加一个列表,该列表包含以下元素:5,6,7
5. 删除元素7
6. 删除元素3, 4
7. 将可变列表转换为不可变列表
8. 将可变列表转换为数组
9. 打印结果 

参考代码

 

1.3 列表的常用操作

1.3.1 格式详解

在实际开发中, 我们经常要操作列表, 以下列举的是列表的常用的操作 :

1.3.2 示例一: 基础操作

需求

1. 定义一个列表list1,包含以下元素:1,2,3,4
2. 使用isEmpty方法判断列表是否为空, 并打印结果.
3. 再定义一个列表list2,包含以下元素: 4,5,6
4. 使用 ++ 将两个列表拼接起来, 并打印结果.
5. 使用head方法,获取列表的首个元素, 并打印结果.
6. 使用tail方法,获取列表中除首个元素之外, 其他所有的元素, 并打印结果.
7. 使用reverse方法将列表的元素反转, 并打印反转后的结果.
8. 使用take方法获取列表的前缀元素, 并打印结果.
9. 使用drop方法获取列表的后缀元素, 并打印结果. 

参考代码

 

1.3.3 示例二: 扁平化(压平)

概述

扁平化表示将嵌套列表中的所有具体元素单独的放到一个新列表中. 如下图:

注意: 如果某个列表中的所有元素都是列表, 那么这样的列表就称之为: 嵌套列表 

需求

1. 定义一个列表, 该列表有三个元素, 分别为:List(1,2)、List(3)、List(4,5)
2. 使用flatten将这个列表转换为List(1,2,3,4,5)
3. 打印结果 

参考代码

 1.3.4 示例三: 拉链与拉开

概述

拉链:将两个列表,组合成一个元素为元组的列表

解释: 将列表List("张三", "李四"), List(23, 24)组合成列表List((张三,23), (李四,24))

拉开:将一个包含元组的列表,拆解成包含两个列表的元组

解释: 将列表List((张三,23), (李四,24))拆解成元组(List(张三, 李四),List(23, 24))

需求 1. 定义列表 names, 保存三个学生的姓名,分别为:张三、李四、王五 2. 定义列表 ages, 保存三个学生的年龄,分别为: 23, 24, 25 3. 使用 zip 将列表 names ages, 组合成一个元素为元组的列表 list1 4. 使用 unzip 将列表 list1 拆解成包含两个列表的元组 tuple1 5. 打印结果 参考代码

1.3.5 示例四: 列表转字符串

概述

将列表转换成其对应的字符串形式, 可以通过 toString方法或者mkString方法 实现, 其中

  • toString方法: 可以返回List中的所有元素
  • mkString方法: 可以将元素以指定分隔符拼接起来。

注意: 默认没有分隔符 

需求 1. 定义一个列表,包含元素: 1,2,3,4 2. 使用 toString 方法输出该列表的元素 3. 使用 mkString 方法 , 用冒号将元素都拼接起来 , 并打印结果. 参考代码

3.3.6 示例五: 并集, 交集, 差集

概述 操作数据时, 我们可能会遇到求并集, 交集, 差集的需求, 这是时候就要用到union, intersect, diff这些方法了, 其中

  • union: 表示对两个列表取并集,而且不去重

例如: list1.union(list2), 表示获取list1和list2中所有的元素(元素不去重).

如果想要去除重复元素, 则可以通过 distinct 实现.

  • intersect: 表示对两个列表取交集

例如: list1.intersect(list2), 表示获取list1, list2中都有的元素.

  • diff: 表示对两个列表取差集.

例如:list1.diff(list2),表示获取list1中有, 但是list2中没有的元素.

需求 

1. 定义列表 list1 ,包含以下元素: 1,2,3,4 2. 定义列表 list2 ,包含以下元素: 3,4,5,6 3. 使用 union 获取这两个列表的并集 4. 在第三步的基础上 , 使用 distinct 去除重复的元素 5. 使用 intersect 获取列表 list1 list2 的交集 6. 使用 diffff 获取列表 list1 list2 的差集 7. 打印结果 参考代码

 

二、集 

2.1 概述 Set( 也叫 : ) 代表没有重复元素的集合 。特点是 : 唯一 , 无序 Scala中的集分为两种,一种是不可变集,另一种是可变集。
解释 : 1. 唯一 的意思是 Set 中的元素具有唯一性 , 没有重复元素 2. 无序 的意思是 Set 集中的元素 , 添加顺序和取出顺序不一致
2.2 不可变集 不可变集指的是 元素 , 集的长度都不可变 . 2.2.1 语法 2.2.2 示例一 : 创建不可变集 需求 1. 定义一个空的整型不可变集 . 2. 定义一个不可变集,保存以下元素: 1,1,3,2,4,8. 3. 打印结果 . 参考代码 2.2.3 示例二 : 不可变集的常见操作 格式 1. 获取集的大小( size 2. 遍历集( 和遍历数组一致 3. 添加一个元素,生成一个新的 Set + 4. 拼接两个集,生成一个新的 Set ++ 5. 拼接集和列表,生成一个新的 Set ++

注意:

1. - ( 减号 ) 表示删除一个元素 , 生成一个新的 Set 2. -- 表示批量删除某个集中的元素 , 从而生成一个新的 Set
需求 1. 创建一个集,包含以下元素: 1,1,2,3,4,5 2. 获取集的大小 , 并打印结果 . 3. 遍历集,打印每个元素 . 4. 删除元素 1 ,生成新的集 , 并打印 . 5. 拼接另一个集 Set(6, 7, 8), 生成新的集 , 并打印 . 6. 拼接一个列表 List(6,7,8, 9), 生成新的集 , 并打印. 参考代码

 

 

2.3 可变集 2.3.1 概述 可变集指的是 元素 , 集的长度都可变 , 它的创建方式和不可变集的创建方式一致,只不过需要先导入可变集类。 手动导入: import scala.collection.mutable.Set 2.3.2 示例 需求 1. 定义一个可变集,包含以下元素 : 1,2,3, 4 2. 添加元素 5 到可变集中 3. 添加元素 6, 7, 8 到可变集中 4. 从可变集中移除元素 1 5. 从可变集中移除元素 3, 5, 7 6. 打印结果. 参考代码

三、映射

映射指的就是 Map 。它是由键值对 (key, value) 组成的集合。特点是 : 键具有唯一性 , 但是值可以重复 . Scala中, Map 也分为不可变 Map 和可变 Map。
注意 : 如果添加重复元素 ( : 两组元素的键相同 ), 会用新值覆盖旧值

3.1 不可变Map

不可变 Map 指的是 元素 , 长度都不可变 . 语法 需求 1. 定义一个映射,包含以下学生姓名和年龄数据 : 张三 -> 23, 李四 -> 24, 李四 -> 40 2. 打印结果. 参考代码

3.2 可变Map

特点 可变 Map 指的是 元素 , 长度都可变 . 定义语法与不可变 Map 一致 , 只不过需要先手动导包 : import scala.collection.mutable.Map 需求 1. 定义一个映射,包含以下学生姓名和年龄数据 : 张三 -> 23, 李四 -> 24 2. 修改张三的年龄为 30 3. 打印结果 参考代码

3.3 Map基本操作

格式 1. map(key) : 根据键获取其对应的值 , 键不存在返回 None. 2. map.keys : 获取所有的键 . 3. map.values : 获取所有的值 . 4. 遍历 map 集合 : 可以通过普通 for 实现 . 5. getOrElse: 根据键获取其对应的值 , 如果键不存在 , 则返回指定的默认值 . 6. + : 增加键值对 , 并生成一个新的 Map. 注意 : 如果是可变 Map, 则可以通过 += 或者 ++= 直接往该可变 Map 中添加键值对元素 . 7. - : 根据键删除其对应的键值对元素 , 并生成一个新的 Map. 注意 : 如果是可变 Map, 则可以通过 - = 或者 -- = 直接从该可变 Map 中删除键值对元素. 示例 1. 定义一个映射,包含以下学生姓名和年龄数据 : 张三 -> 23, 李四 -> 24 2. 获取张三的年龄 , 并打印 . 3. 获取所有的学生姓名 , 并打印 . 4. 获取所有的学生年龄 , 并打印 . 5. 打印所有的学生姓名和年龄 . 6. 获取 王五 的年龄,如果 王五 不存在,则返回 -1, 并打印 . 7. 新增一个学生:王五 , 25, 并打印结果 . 8. 李四 从可变映射中移除 , 并打印. 参考代码

 

 

spark基础学习笔记14:scala数据结构(代码片段)

...xff09;定长数组1、数组定义(1)定义数组时初始化数据(2)定义时指定数组长度,后赋值2、数组遍历(1)传统for循环方式(2)增强for循环方式3、常用方法(1)求数组中数值总和(2... 查看详情

大数据技术之_16_scala学习_08_数据结构(下)-集合操作+模式匹配(代码片段)

第十一章数据结构(下)-集合操作11.1集合元素的映射-map11.1.1map映射函数的操作11.1.2高阶函数基本使用案例1+案例211.1.3使用map映射函数来解决11.1.4模拟实现map映射函数的机制11.1.5课堂练习11.2集合元素的扁平-flatMap11.3集合元素的过滤... 查看详情

scala模式匹配详解

...抽象类Scala基础语法之Trait详解Scala学习之数组与元组 大数据Scala学习—列表、集与映射理解Scala的函数式编程思想 Scala中有一个非常强大的模式匹配机制,应用也非常广泛,例如:判断固定值类型查询快速获取数据1简单模式匹... 查看详情

大数据处理学习笔记1.6scala数据结构(代码片段)

...xff09;定长数组1、数组定义(1)定义数组时初始化数据(2)定义时指定数组长度,后赋值2、数组遍历(1)传统for循环方式(2)增强for循环方式(3)利用foreach算子遍历数组课堂练习࿱... 查看详情

scala之option类型及偏函数使用异常处理正则表达式

...抽象类Scala基础语法之Trait详解Scala学习之数组与元组 大数据Scala学习—列表、集与映射理解Scala的函数式编程思想Scala模式匹配详解一、Option类型1.1概述实际开发中,在返回一些数据时,难免会遇到空指针异常(NullPointerException),遇到... 查看详情

大数据学习之scala语言基本语法学习36

...成了面向对象和函数式编程的特点。运行在JVM(jdk)。大数据中为什么学习scala?spark是scala语言编写。python写spark挺好的java写spark很糟糕(代码实在是太多了)scala写spark很完美二:scala特点1)优雅框架设计中第一个要考虑的问题就是... 查看详情

大数据周会-本周学习内容总结09

...】02【Saprk】会议记录01【scala】1.1【已学内容】尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】尚硅谷大数据技术Scala教程-笔记02【函数式编程】尚硅谷大数据技术Scala教程-笔... 查看详情

大数据之scala高级语法学习

协变案例一:classAnimal{}classBirdextendsAnimal{}classAnimal{}classBirdextendsAnimal{}//协变classCovariant[T](t:T){}valcov=newCovariant[Bird](newBird)valcov2:Covariant[Animal]=covc不能赋值给c2,因为Covariant定义成不变类型。稍 查看详情

大数据学习——scala入门练习(代码片段)

packagecom/***CreatedbyZXon2015/11/6.*/objectVariableDemodefmain(args:Array[String])//1定义变量-----------------------------------------//使用val定义的变量值是不可变的,相当于java里用final修饰的变量vali=1//使用var定义的变量是可变得,在Scal 查看详情

scala数据结构:映射map(代码片段)

1 映射Map-基本介绍Scala中的Map介绍1)Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。2) Scala中,有可变Map(scala.collection.mutable.Map)和不可变Map(... 查看详情

如何在 Scala 中处理大列表?

...】:2014-12-3022:20:29【问题描述】:我曾经用Python处理统计数据。比如一个大文件包含几千万个id:$catreport_ids|head37880657950319140494477182851142120757318160033281780870294259111810436387321214379 查看详情

如何快速学习scala(代码片段)

大数据学习过程中,会学习非常多的技术,但SCALA无疑是必不可少,那我们在大数据技术的学习过程中,如何快速的认识scala,并且学习它,感谢科多大数据公司的余老师提供的详细素材,本人整理成章,希望对你们有帮助。众... 查看详情

大数据spark学习:scala基础第一课

计划:阶段1:精通Spark内核阶段2:精通千万级的项目阶段3:机器学习JAVA本身不是伟大的语言,伟大的是JVM,构件分布式平台什么的,依赖的是JVM,不一定要JAVA语言可认为Scala是JAVA的升级语言,JAVA是支持面向对象的语言,而非... 查看详情

Scala 使用求和逻辑按属性从列表转换为映射

】Scala使用求和逻辑按属性从列表转换为映射【英文标题】:Scalaconvertfromlisttomapbypropertywithsumlogic【发布时间】:2021-09-2108:50:59【问题描述】:我是Scala的新手,尝试使用一些求和逻辑从列表转换为映射,如下所示。caseclassProductPr... 查看详情

Scala:将 Map 映射到元组列表

】Scala:将Map映射到元组列表【英文标题】:Scala:mapaMaptolistoftuples【发布时间】:2015-04-3010:03:00【问题描述】:我尝试使用Map.map将地图转换为元组列表。然而这失败了。我做了以下实验:valm=Map(("a"->1),("b"->2))//>m:scala.collect... 查看详情

大数据学习06scala的基础语法(代码片段)

大数据学习06Scala的基础语法介绍Scala的基础语法文章目录大数据学习06Scala的基础语法前言一、注释二、变量与常量1.基本语法2.代码实操三、标识符的命名规范1.命名规范2.字符串输出3.调试效果四、控制台标准输入1.代码实现2.调... 查看详情

大数据学习:scala面向对象和spark一些代码读和问

画外音:Spark对面向对象的支持是非常完美的主题:1、简单的类;2、重写getter、setter方法;3、利用其它方法来控制外部对值的控制;4、private[this];5、构造器以及构造器相关;直接代码见真章:==========最简单的类============scala&... 查看详情

scala学习——元组&映射

再说集合之前,我们先来回顾一下映射&元祖映射是键/值对偶的集合,Scala有一个通用的叫法——元组,也就是n个对象的聚集,并不一定要相同类型的。对偶不过是一个n=2的元祖。元祖对于那种需要将两个或更多值聚集在一起... 查看详情