Scala--集合操作

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

解决刚开始的问题:
Scala--集合操作_第2张图片
⭐⭐⭐⭐⭐
模拟map 映射函数
Scala--集合操作_第3张图片

集合扁平化 flatMap

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

Scala--集合操作_第4张图片

下面这种情况好像就不可以
Scala--集合操作_第5张图片

集合元素过滤 filter

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

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

Scala--集合操作_第6张图片

集合化简

在这里插入图片描述

Scala--集合操作_第7张图片
reduceLeft
reduceLeft 就是 reduce
Scala--集合操作_第8张图片

逻辑图:
Scala--集合操作_第9张图片

reduceRight
Scala--集合操作_第10张图片
化简找最小值:
Scala--集合操作_第11张图片

折叠

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

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

Scala--集合操作_第12张图片

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

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

Scala--集合操作_第13张图片

扫描

在这里插入图片描述
左扫描:
Scala--集合操作_第14张图片
右扫描:
Scala--集合操作_第15张图片

题目一:
val sentence = “AAAAAAAAAABBBBBBBBCCCCCDDDDDDD”
将sentence 中各个字符,通过foldLeft存放到 一个ArrayBuffer中
目的:理解flodLeft的用法.
Scala--集合操作_第16张图片

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

Java 编写:
Scala--集合操作_第17张图片
Scala 不可变Map 完成:
Scala--集合操作_第18张图片

Scala 可变Map 完成
Scala--集合操作_第19张图片

拉链

将两个集合进行 对偶元组 合并
Scala--集合操作_第20张图片
注意事项:
1)拉链的本质就是两个集合的合并操作,合并后每个元素是一个 对偶元组。
2)操作的规则下图:
在这里插入图片描述
3)如果两个集合个数不对应,会造成数据丢失。
Scala--集合操作_第21张图片
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 方法变量

Scala--集合操作_第22张图片

流 Stream

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

当对流使用 tail 时,就会产生新的数据
Scala--集合操作_第23张图片

线程安全的集合

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

SynchronizedBuffer
SynchronizedMap
SynchronizedPriorityQueue
SynchronizedQueue
SynchronizedSet
SynchronizedStack

并行集合

只需要在集合后面加上 .par 即可
Scala--集合操作_第24张图片

distinct 去重

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

你可能感兴趣的:(Scala--集合操作)