** 集合元素的映射 – 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表达式对集合进行遍历.(学习使用迭代器来遍历)
- 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 笔记