Scala练习
wordCountpackage com.doit.day03
import scala.io.{BufferedSource, Source}
object WordCountDemo {
def main(args: Array): Unit = {
//读取文件,获取到一个Source对象
val source: BufferedSource = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\word.txt")
//调用getLines方法,获取到每一行数据,每一行数据都放在迭代器中
val lines: Iterator = source.getLines()
//如果我现在直接这么返回,他的返回值是什么?? Iterator==》 同样的返回一个迭代器,迭代器里面放得是Array 数组里面每一个元素放得都是一个个的单词
val arrWord: Iterator] = lines.map(line => {
//1.需要将每一行数据拿出来进行切割,变成一个个的单词
//hello hadoophive
val wordsArr: Array = line.split("\\s+")
wordsArr
})
//将迭代器转换成了集合
val list: List] = arrWord.toList
//将list中的array压平,这样list装的就是每一个单词了
val word: List = list.flatten
//对每一个单词进行分组,相同的单词分在一组,key就是单词,value是一个list,所有相同的单词都放在这个list中
val wordAndList: Map] = word.groupBy(word => word)
//转换,将list转换成长度,长度就是单词的个数
val wordCount: Map = wordAndList.map(tup => (tup._1, tup._2.size))
//查看结果
println(wordCount)
}
}平均温度案例
package com.doit.day03
/**
* 需求:求最近几天每个城市的平均温度
*/
object AvgTem {
def main(args: Array): Unit = {
val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))
//1.将所有的数据都放在一个数组或者集合中
val allData: Array[(String, Double)] = d1 ++ d2 ++ d3
//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))
//按照城市分组
val grouped: Map] = allData.groupBy(tp => tp._1)
//方式一,获取到所有的温度,sum求和后求平均
val res: Map = grouped.map(tp => {
//数组中每一个元素的key都是一样的,只是温度不一样,现在需要将整个数组转换成城市,平均温度
val value: Array[(String, Double)] = tp._2
val avg: Double = value.map(_._2).sum / value.length
(tp._1, avg)
})
println(res)
//方式二,只对value进行处理
val res1: Map = grouped.mapValues(tp => {
val avg: Double = tp.reduce(_._2 + _._2) / tp.length
(tp(0)._1, avg)
})
}
}共同好友案例
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): Unit = { val lines: Iterator = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\friends").getLines() val myAndFriends: List[(String, Array)] = lines.toList.map(line => { // A:B,C,D,F,E,O :前面的是我自己,:后面的是我的朋友们 val arr: Array = line.split(":") //获取到我自己 val user: String = arr(0) //获取到我的朋友们,朋友们都放在数组里面,里面的元素就是一个个的朋友对象 val friends: Array = arr(1).split(",") (user, friends) }) //获取共同好友。。。 for(i
页:
[1]