Scala语言中,foldLeft函数的三个使用场景:
列表内数值的相加,作用相当于sum;
List(1,7,2,9).foldLeft(0)(_-_)
(1)List从左开始
(2)结果在左面
0-1
(0-1)-7
((0-1)-7)-2
(((0-1)-7)-2)-9
List(1,7,2,9).foldRight(0)(_-_)
(1)List从右开始
(2)结果在右面
9-0
2-(9-0)
7-(2-(9-0))
1-(7-(2-(9-0)))
变换后的Map集合有重复key值,并且需要根据key值合并
合并Map重复key值统计词长度
package spark2021 object foldLeft_test { def main(args: Array[String]): Unit = { //场景一:列表数值相加 val list = List(1,2,3,4,5) val sum_list: Int = list.foldLeft(0)(_+_) println(sum_list) //map++更新数据 map+添加数据 //合并两个Map //++:重复key值相加,不覆盖 val map1 = Map("aa" -> 1, "bb" -> 2) val map2 = Map("aa" -> 2, "cc" -> 4) val map3: Map[String, Int] = map1++map2 println(map3) //Map(aa -> 2.0, bb -> 2.0, cc -> 4.0) //foldLeft:map相同key的value没有被覆盖,而是相加合并了 val map4: Map[String, Int] = map1.foldLeft(map2) { case (newMap, (name, score)) => { newMap + (name -> (score + map2.getOrElse(name, 0))) } } println(map4) //Map(aa -> 3, cc -> 4, bb -> 2) //统计不同长度单词的总词频 val wordsMap = Map("apple" -> 20, "pear" -> 10, "pineapple" -> 25, "grape" -> 30) val map5= wordsMap.foldLeft(Map.empty[Int,Int]){ case(newMap,(fruit,count))=>{ newMap+(fruit.length->(count+newMap.getOrElse(fruit.length,0))) } } println(map5) } }
原文:https://www.cnblogs.com/hapyygril/p/14233814.html