1 map映射操作
map 映射可以将集合内的每一个元素通过指定的功能(函数) 映射转化成新的集合
# 将 list1内的每一个元素加 1 操作 ,也可以传入一个函数
scala> val list1=List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
scala> val list2 = list1.map(x=>x+1)
list2: List[Int] = List(2, 3, 4, 5)
scala> list2
res0: List[Int] = List(2, 3, 4, 5)
2 filter 过滤操作
filter 过滤是将符合条件的元素过滤到新的集合中
# filter 过滤
scala> val list3 = List(10,20,30)
list3: List[Int] = List(10, 20, 30)
scala> val list4 =list3.filter(x=>x>=20)
list4: List[Int] = List(20, 30)
scala> list4
res1: List[Int] = List(20, 30)
3 reduceLeft 化简
reduceLeft 与 reduceRight
val list = List(1, 2, 3, 4, 5)
list3.reduceLeft(_ + _) // 数组求和 ( ( ( (1+2)+3)+4)+5)
list3.reduceLeft(_ * _) // 数组求乘积
list3.reduceLeft(_ min _) // 数组求最小直值
list3.reduceLeft(_ max _) // 数组求最大值
list.reduceRight(minus) // 从右边开始运算 1 - (2 - (3 -(4 - 5))) = 3
list.reduceLeft(min) // 使用自定义函数
// 自定义函数 求最小值
def min(n1: Int, n2: Int): Int = {
if (n1 > n2) n2 else n1
}
4 foldLeft 折叠
reduceLeft是 foldLeft的简化版,foldLeft使用时需要传入一个初始值
foldLeft 与 foldRight
scala> val list = List(1, 2, 3, 4, 5)
list: List[Int] = List(1, 2, 3, 4, 5)
scala> list.foldLeft(5)(_-_) // 可以理解为 List(5,1, 2, 3, 4, 5)
res9: Int = -10 // 执行步骤: ((((5-1)-2)-3)-4)-5
scala> list.foldRight(5)(_-_) // 右折叠 1-(2-(3-(4-(5-5))))
res10: Int = -2
scala> (5 /: list)(_-_) // 左折叠可以这样简写
res13: Int = -10
scala> (list :\ 5)(_-_) // 右折叠 可以这样简写
res14: Int = -2
5 scan 扫描
scan扫描会把所有的元素做fold操作,但是会把产生的所有中间结果放置于一个集合中保存
scala> val list = List(1, 2, 3, 4, 5)
scala> var list2 = list.scanLeft(5)(_+_)
list2: List[Int] = List(5, 6, 8, 11, 15, 20) // 可以观察到其实是把 foldLeft的每一步操作结果保存到集合中
6 zip 拉链
zip 就是对两个集合进行对偶元组合并,可以使用拉链,需要取值时 ,需要遍历,要求两个集合长度相同
scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)
scala> val list2 = List(4, 5, 6)
list2: List[Int] = List(4, 5, 6)
scala> list.zip(list2)
res15: List[(Int, Int)] = List((1,4), (2,5), (3,6))
zipAll 用法,可以对两个相同或不同的结合进行操作,需要传入两个默认值,当集合长度不同时需要用到
scala> val list = List(1,2,3)
list: List[Int] = List(1, 2, 3)
scala> val list1 = List(4,5,6,7)
list1: List[Int] = List(4, 5, 6, 7)
scala> list.zipAll(list1,8,9)
res1: List[(Int, Int)] = List((1,4), (2,5), (3,6), (8,7))
7 迭代器
/* 源码
def iterator: Iterator[A] = new AbstractIterator[A] {
var these = self
def hasNext: Boolean = !these.isEmpty
def next(): A =
if (hasNext) {
val result = these.head; these = these.tail; result
} else Iterator.empty.next()
*/
使用
遍历迭代器取值
val iterator = List(1, 2, 3, 4, 5).iterator
方法一:
while (iterator.hasNext) {
println(iterator.next())
}
方法二
for(enum <- iterator) {
println(enum)
}