Scala中集合的方法求wordCount代码解析

wordcount的详细分析
def main ( args: Array [ String ]) : Unit = {
// 文本拆分成多行,把多行转换成一个集合
val list: List [ String ] = Source. fromFile ( "input/word.txt" ) .getLines () .toList
println ( list )
//flatmap 是先 map flatten
// 此时文本中的每一行就是一个元素,下面的下划线就是一行
// 得到的结果是一个一个的单词
val wordList: List [ String ] = list.flatMap ( _.split ( " " ))
// 对每个单词进行转换操作(单词, 1
val word2OneList: List [( String , Int )] = wordList.map (( _, 1 ))
// 上面得到的结果是一个集合,集合中的内容是:( hello,1 (word,1)(word,1)(hello,1)...
// 根据每个元素的 key 进行分组
// 表示的是按照对偶元素中的第一个元素 ( 单词 ) 分组。第一个下划线是每个元组,第二个 _1, 表示的是元组中的第一个元素
val word2ListMap: Map [ String , List [( String , Int )]] = word2OneList.groupBy ( _._1 )
println ( word2ListMap )
// 上面是一个 map 集合,注意一下 map 的类型,表示的是相同的元组是放到了同一个 list 集合
// 上面的 Map 中的每个元素的格式是(单词名 ->List(( 单词名, 1) (单词名, 1 )(单词名, 1 )
//Map中 元素的本质是元组,元组的第一个元素代表单词,第二个元素是一个 list 集合。最终操作的是每个元组
//map 当中 -> 其实就是逗号的意思
val word2CountMap: Map [ String , Int ] = word2ListMap.map ( //map 后的小括号需要我们传递一个逻辑,使用匿名函数:() =>{}
kv => { //kv 表示的就是拿到的每个元素,元素的格式是: (单词名 ->List(( 单词名, 1) (单词名, 1 )(单词名, 1 )
// 最后统计的格式是 ( hello,4 (word,3) 这种形式
( kv._1, kv._2.size ) // 格式就是(单词,对应的单词所在的集合的长度)
}
)
println ( word2CountMa
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值