Scala--集合操作

本文介绍了Scala中集合的各种操作,包括map映射、flatMap扁平化、filter过滤、reduceLeft/reduceRight化简、fold折叠、scan扫描、拉链zip、迭代器、流Stream和线程安全及并行集合的使用。通过实例展示了如何在Scala中对集合进行高效操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

** 集合元素的映射 – map 映射操作**
问题抛出:
将 List(3,5,7) 中所有元素都 * 2,将其结果放到一个新的集合中返回,即返回 List(6,10,14)
传统方法:
在这里插入图片描述
map 映射操作是一个操作,针对所有集合,并不是只针对 Map 集合 的操作

解决刚开始的问题:
在这里插入图片描述
⭐⭐⭐⭐⭐
模拟map 映射函数
在这里插入图片描述

集合扁平化 flatMap

就是将集合中的每个元素的子元素映射到某个函数并返回新的集合

在这里插入图片描述

下面这种情况好像就不可以
在这里插入图片描述

集合元素过滤 filter

filter: 将符合要求的数据(筛选)放置到新的集合中

startsWith() 方法用于检测字符串是否以指定的前缀开始。

在这里插入图片描述

集合化简

在这里插入图片描述

在这里插入图片描述
reduceLeft
reduceLeft 就是 reduce
在这里插入图片描述

逻辑图:
在这里插入图片描述

reduceRight
在这里插入图片描述
化简找最小值:
在这里插入图片描述

折叠

fold函数将上一步返回的值作为函数的第一个参数继续传递参与运算,直到list中的所有元素被遍历。

可以把reduceLeft看做简化版的foldLeft。
如何理解:大家可以看到. reduceLeft就是调用的foldLeft[B] (head),
并且是默认从集合的head元素开始操作的。
相关函数:fold,foldLeft,foldRight,可以参考reduce的相关方法理解

在这里插入图片描述

折叠的缩写:
/: 左折叠
:\ 右折叠
集合写在:的旁边
数字写在/的旁边

var i6 = (1 /: list4) (minus) // =等价=> list4.foldLeft(1)(minus)
var i6 = (list4 :\ 10) (minus) //=等价=> list4.foldRight(10)(minus)

在这里插入图片描述

扫描

在这里插入图片描述
左扫描:
在这里插入图片描述
右扫描:
在这里插入图片描述

题目一:
val sentence = “AAAAAAAAAABBBBBBBBCCCCCDDDDDDD”
将sentence 中各个字符,通过foldLeft存放到 一个ArrayBuffer中
目的:理解flodLeft的用法.
在这里插入图片描述

题目二:
val sentence = “AAAAAAAAAABBBBBBBBCCCCCDDDDDDD”
使用映射集合,统计一句话中,各个字母出现的次数
提示:MapChar, Int

Java 编写:
在这里插入图片描述
Scala 不可变Map 完成:
在这里插入图片描述

Scala 可变Map 完成
在这里插入图片描述

拉链

将两个集合进行 对偶元组 合并
在这里插入图片描述
注意事项:
1)拉链的本质就是两个集合的合并操作,合并后每个元素是一个 对偶元组。
2)操作的规则下图:
在这里插入图片描述
3)如果两个集合个数不对应,会造成数据丢失。
在这里插入图片描述
4)集合不限于List, 也可以是其它集合比如 Array
5)如果要取出合并后的各个对偶元组的数据,可以遍历

迭代器:

通过iterator方法从集合获得一个迭代器,通过while循环和for表达式对集合进行遍历.(学习使用迭代器来遍历)

  1. iterator 的构建实际是 AbstractIterator 的一个匿名子类,该子类提供了

def iterator: Iterator[A] = new AbstractIterator[A] {
var these = self
def hasNext: Boolean = !these.isEmpty
def next(): A =

2)该AbstractIterator 子类提供了 hasNext next 等方法.
3)因此,我们可以使用 while的方式,使用hasNext next 方法变量

在这里插入图片描述

流 Stream

stream是一个集合。
这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果才进行计算的) 。

当对流使用 tail 时,就会产生新的数据
在这里插入图片描述

线程安全的集合

所有线程安全的集合都是以 Synchronized 开头的集合

SynchronizedBuffer
SynchronizedMap
SynchronizedPriorityQueue
SynchronizedQueue
SynchronizedSet
SynchronizedStack

并行集合

只需要在集合后面加上 .par 即可
在这里插入图片描述

distinct 去重

-----------韩顺平老师Scala 笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值