首先我们接收一个字符串,
val lines = List("abc han hello ","abc han aaa aaa aaa ccc ddd uuu ")
val res1 = lines.flatMap((s:String) => s.split(" "))
首先是集合的扁平化 我们首先接收的是字符串,进行一个分隔
输出结果:
然后我们把上述的代码简化一下: _代表的是一个默认值 此时默认值是集合中的子元素
val res1 = lines.flatMap(_.split(" "))
println("res1="+res1)
输出结果与上一致。
我们调用.map()函数,可以看到它提示我们第一个传的是字符串,返回值没有规定
遍历res1的集合,首先挨个的传入一个字符串进来,我们定义这个字符串为s
然后我们把它组合成 (s,1)
val res1 = lines.flatMap(_.split(" "))
println("res1="+res1)
//2. 步骤=> 做成一个对偶List=> 才能分组并统计
val res2 = res1.map((s:String) => (s,1))
println("res2="+res2)
我们再次简化,变成如下的:
val res2 = res1.map((_,1))
println("res2="+res2)
val res3 = res2.groupBy((x:(String,Int)) => x._1)
println("res3="+res3)
我们首先把形参给弄出来: x:(String,Int) 遍历一个一个的是元组
那么x._1的含义是:
再次简化变成:
val res3 = res2.groupBy(_._1)
println("res3="+res3)
val res4 = res3.map((x:(String,List[(String,Int)]))=> (x._1,x._2.size))
println("res4="+res4)
再次简化:
val res4 = res3.map(x=>(x._1,x._2.size))
println("res4="+res4)
注意:不能写成 map(_.1,._2.size)
因为下划线不能出现2次。
首先res4() 是一个Map
我们把res4转换成一个List列表,再调用sortBy()
大小排序:reverse
val res5 = res4.toList.sortBy((x:(String,Int))=>x._2).reverse
println("res5:"+res5)
简写:
val res5 = res4.toList.sortBy(_._2).reverse
println("res5:"+res5)
//合并
println(lines.flatMap(_.split(" ").map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size))
.toList.sortBy(_._2).reverse))
package com.Word
object WordCount {
def main(args: Array[String]): Unit = {
/*
val lines = List("atguigu han hello ","atguigu han aaa aaa aaa ccc ddd uuu ")
使用映射集合 list中 各个单词出现的次数, 并按出现次数排序(从大到小)
*/
val lines = List("abc han hello ","abc han aaa aaa aaa ccc ddd uuu ")
//1. 首先集合扁平化, 传入的是字符串
// val res1 = lines.flatMap((s:String) => s.split(" "))
// println("res1= " + res1 ) //res1= List(abc, han, hello, abc, han, aaa, aaa, aaa, ccc, ddd, uuu)
val res1 = lines.flatMap(_.split(" "))
println("res1="+res1)
// //2. 步骤=> 做成一个对偶List=> 才能分组并统计
// val res2 = res1.map((s:String) => (s,1))
// println("res2="+res2)
//2. 步骤=> 做成一个对偶List=> 才能分组并统计
val res2 = res1.map((_,1))
println("res2="+res2)
// val res3 = res2.groupBy((x:(String,Int)) => x._1)
// println("res3="+res3)
// //res3=Map(han -> List((han,1), (han,1)), abc -> List((abc,1),
// //(abc,1)), ddd -> List((ddd,1)), ccc -> List((ccc,1)), uuu -> List((uuu,1)),
// // hello -> List((hello,1)), aaa -> List((aaa,1), (aaa,1), (aaa,1)))
val res3 = res2.groupBy(_._1)
println("res3="+res3)
// val res4 = res3.map((x:(String,List[(String,Int)]))=> (x._1,x._2.size))
val res4 = res3.map(x=>(x._1,x._2.size))
println("res4="+res4)
//res4=Map(han -> 2, abc -> 2, ddd -> 1, ccc -> 1, uuu -> 1, hello -> 1, aaa -> 3)
// val res5 = res4.toList.sortBy((x:(String,Int))=>x._2).reverse
val res5 = res4.toList.sortBy(_._2).reverse
println("res5:"+res5)
//合并
println(lines.flatMap(_.split(" ").map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size))
.toList.sortBy(_._2).reverse))
}
}