map操作:
- 让每个字符串都变成大写字母
scala> val books = List("Hadoop", "Hive", "HDFS")
books: List[String] = List(Hadoop, Hive, HDFS)
scala> books.map(s => s.toUpperCase)
res0: List[String] = List(HADOOP, HIVE, HDFS)
(参数) => 表达式 //如果参数只有一个,参数的圆括号可以省略
flatMap操作:
flatMap是map的一种扩展。在flatMap中,我们会传入一个函数,该函数对每个输入都会返回一个集合(而不是一个元素),然后,flatMap把生成的多个集合“拍扁”成为一个集合。
scala> val books = List("Hadoop","Hive","HDFS")
books: List[String] = List(Hadoop, Hive, HDFS)
scala> books flatMap (s => s.toList)
res0: List[Char] = List(H, a, o, o, p, H, i, v, e, H, D, F, S)
filter操作:
遍历一个集合并从中获取满足指定条件的元素组成一个新的集合
- 下面我们首先创建一个映射
val a = Map("X" -> "Xiamen", "T" -> "Tsinghua","P"->"Peking","N"->"Nantong")
//然后我们采用filter操作过滤得到那些包含“Xiamen”的元素:
val b = a filter {kv => kv._2 contains "Xiamen"}
//遍历打印 b
b foreach{kv=> println(kv._1+":"+kv._2)}
//也可以采用filter操作过滤得到那些学校名称中以字母“P”开头的元素
val c=a filter{kv=>kv._2 startsWith "P"}
//遍历打印 c
c foreach{kv=> println(kv._1+":"+kv._2)}
reduce操作:
使用reduce这种二元操作对集合中的元素进行归约
scala> val a = List(1,2,3,4,5)
a: List[Int] = List(1, 2, 3, 4, 5)
scala> a.reduceLeft(_ + _)
res21: Int = 15
scala> a.reduceRight(_ + _)
res22: Int = 15
- a.reduceLeft(_ + _)
1+2 = 3
3+3 = 6
6+4 = 10
10+5 = 15
- a.reduceRight(_ + _)
4+5 = 9
3+9 = 12
2+12 = 14
1+14 = 15
直接使用reduce,默认采用的是reduceLeft
fold操作:
折叠 ( fold ) 操作和 reduce(归约)操作比较类似
scala> val a = List(1,2,3,4,5)
a: List[Int] = List(1, 2, 3, 4, 5)
scala> a.fold(10)(_*_)
res0: Int = 1200
fold 有两个变体:foldLeft() 和 foldRight(),其中,foldLeft(),第一个参数为累计值,集合遍历的方向是从左到右。 foldRight() ,第二个参数为累计值,集合遍历的方向是从右到左。对于 fold() 自身而言,遍历的顺序是未定义的,不过,一般都是从左到右遍历。
- 我感觉 fold 中已经包含了 reduce 操作, fold(0)(+) 等于 reduce(+)