Scala练习

打印 上一主题 下一主题

主题 936|帖子 936|积分 2808

wordCount
  1. package com.doit.day03
  2. import scala.io.{BufferedSource, Source}
  3. object WordCountDemo {
  4.   def main(args: Array[String]): Unit = {
  5.     //读取文件,获取到一个Source对象
  6.     val source: BufferedSource = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\word.txt")
  7.     //调用getLines方法,获取到每一行数据,每一行数据都放在迭代器中
  8.     val lines: Iterator[String] = source.getLines()
  9.     //如果我现在直接这么返回,他的返回值是什么??   Iterator[String]  ==》 同样的返回一个迭代器,迭代器里面放得是Array[String] 数组里面每一个元素放得都是一个个的单词
  10.     val arrWord: Iterator[Array[String]] = lines.map(line => {
  11.       //1.需要将每一行数据拿出来进行切割,变成一个个的单词
  12.       //hello   hadoop  hive
  13.       val wordsArr: Array[String] = line.split("\\s+")
  14.       wordsArr
  15.     })
  16.     //将迭代器转换成了集合
  17.     val list: List[Array[String]] = arrWord.toList
  18.     //将list中的array压平,这样list装的就是每一个单词了
  19.     val word: List[String] = list.flatten
  20.     //对每一个单词进行分组,相同的单词分在一组,key就是单词,value是一个list,所有相同的单词都放在这个list中
  21.     val wordAndList: Map[String, List[String]] = word.groupBy(word => word)
  22.     //转换,将list转换成长度,长度就是单词的个数
  23.     val wordCount: Map[String, Int] = wordAndList.map(tup => (tup._1, tup._2.size))
  24.     //查看结果
  25.     println(wordCount)
  26.   }
  27. }
复制代码
平均温度案例
  1. package com.doit.day03
  2. /**
  3. * 需求:求最近几天每个城市的平均温度
  4. */
  5. object AvgTem {
  6.   def main(args: Array[String]): Unit = {
  7.     val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
  8.     val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
  9.     val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))
  10.     //1.将所有的数据都放在一个数组或者集合中
  11.     val allData: Array[(String, Double)] = d1 ++ d2 ++ d3
  12.     //Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 33.1),("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3),("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.1))
  13.     //按照城市分组
  14.     val grouped: Map[String, Array[(String, Double)]] = allData.groupBy(tp => tp._1)
  15.     //方式一,获取到所有的温度,sum求和后求平均
  16.     val res: Map[String, Double] = grouped.map(tp => {
  17.       //数组中每一个元素的key都是一样的,只是温度不一样,现在需要将整个数组转换成城市,平均温度
  18.       val value: Array[(String, Double)] = tp._2
  19.       val avg: Double = value.map(_._2).sum / value.length
  20.       (tp._1, avg)
  21.     })
  22.     println(res)
  23.     //方式二,只对value进行处理
  24.     val res1: Map[String, (String, Double)] = grouped.mapValues(tp => {
  25.       val avg: Double = tp.reduce(_._2 + _._2) / tp.length
  26.       (tp(0)._1, avg)
  27.     })
  28.   }
  29. }
复制代码
共同好友案例

[code]package com.doit.day03import scala.io.{BufferedSource, Source}/** * 数据如下  :每个字母代表一个人 ,  统计任意一个人和其他人的共同好友 * A:B,C,D,F,E,O * B:A,C,E,K * C:F,A,D,I * D:A,E,F,L * E:B,C,D,M,L * F:A,B,C,D,E,O,M * G:A,C,D,E,F * H:A,C,D,E,O * I:A,O * J:B,O * K:A,C,D * L:D,E,F * M:E,F,G * O:A,H,I,J */object SameFriends {  def main(args: Array[String]): Unit = {     val lines: Iterator[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\friends").getLines()     val myAndFriends: List[(String, Array[String])] = lines.toList.map(line => {        //        A:B,C,D,F,E,O   :前面的是我自己,:后面的是我的朋友们        val arr: Array[String] = line.split(":")        //获取到我自己        val user: String = arr(0)        //获取到我的朋友们,朋友们都放在数组里面,里面的元素就是一个个的朋友对象        val friends: Array[String] = arr(1).split(",")        (user, friends)     })     //获取共同好友。。。     for(i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表