用scala统计单词个数一步一步详解

val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")

用scala统计单词个数一步一步详解

//先按空格切分

val lines_1 = lines.map(_.split(" "))

用scala统计单词个数一步一步详解

//压平

val lines_2 = lines_1.flatten

用scala统计单词个数一步一步详解

//用flatMap 两步合并成一步

val words= lines.flatMap(_.split(" "))

//将每一个单词映射为元组

val wordToOne = lines_3.map(x=>(x,1))

val wordToOne = lines_3.map((_,1))

用scala统计单词个数一步一步详解

//分组

val grouped = wordToOne.groupBy(_._1)

用scala统计单词个数一步一步详解

组内求和

val grouped_1 = grouped.map(t => (t._1,t._2.size))

用scala统计单词个数一步一步详解

//将map转化成List

val result = grouped_1.toList

用scala统计单词个数一步一步详解

//排序

val result_1 = result.sortBy(_._2).reverse

用scala统计单词个数一步一步详解

合并为一句

val words = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size)).toList.sortBy(_._2).reverse

val words = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size).toList.sortBy(_._2).reverse

val words = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)

(_+_._2)).toList.sortBy(_._2).reverse

从本地读取文件

[java] view plain copy

  1. package main.count
  2. import scala.io.Source
  3. object WordCounts {
  4. /*
  5. * 从本地读取文件统计个数
  6. * */
  7. def main(args: Array[String]): Unit = {
  8. val lines=Source.fromFile("d:\words.txt").getLines().toBuffer
  9. //val lines=lines.map(_.split(" ")).flatten.map(t=>(t,1)).groupBy(_._1).map(x=>(x._1,x._2.size)).toList.sortBy(_._2).reverse
  10. val lines1=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size)).toList.sortBy(_._2).reverse
  11. println(lines1)
  12. }
  13. }

相关推荐