foldLeft
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 import scala.collection.mutable.Map 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"+sum_list) //map++更新数据 map+添加数据 //合并两个Map //++:重复key值相加,不覆盖 var map1 = Map("aa" -> 1, "bb" -> 2) var map2 = Map("aa" -> 2, "cc" -> 4) val map3: Map[String, Int] = map1++map2 println("map3"+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))) // newMap += (name -> (score + newMap.getOrElse(name, 0))) } } println("map4"+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"+map5) // sum_list15 // map3Map(bb -> 2, cc -> 4, aa -> 2) // map4Map(bb -> 2, cc -> 4, aa -> 3) // map5Map(5 -> 50, 4 -> 10, 9 -> 25) } }
posted on 2021-01-05 09:11 happygril3 阅读(121) 评论(0) 收藏 举报
浙公网安备 33010602011771号