9.1.7、Scala__wordcount案例,scala中的wordcount案例

wordcount案例

object Demo17Wordcount {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //1、读取文件数据
    val bs: BufferedSource = Source.fromFile("data/words.txt")

    //2、读取一行行数据转成List,因为list中方法多,一行数据就是list一个元素
    val lines: List[String] = bs.getLines().toList

    //3、将一行行数据切分成一个个单词
    val word: List[String] = lines.flatMap(_.split(","))

    //4、按照每个单词分组,返回二元组(map),k为单词,v为所有符合的单词构成的List
    //直接求后面list的长度就是分组内元素的个数
    val groupby: Map[String, List[String]] = word.groupBy(word=>word)

    //5、将map遍历出来求v的长度就是格式
    groupby.map(kv=>{
    
    
      val key: String = kv._1         //key
      val value: List[String] = kv._2 //value
      val num: Int = value.size       //value为一个list,求长度
      (key,num)                        //返回
    }).foreach(println)                //打印

    //简写,链式调用
    Source.fromFile("data/words.txt")
        .getLines()
        .toList
        .flatMap(_.split(","))
        .groupBy(word=>word)
        .map(kv=>(kv._1,kv._2.size))
        .foreach(println)
    
    //6、关闭
    bs.close()
  }

}