Scala中做简易wordCount
使用foldLeft函数,实现简易的wordCount
import scala.collection.mutable
object Demo_019 {
def main(args: Array[String]): Unit = {
val list = List("bigdata han hello ", "bigdata han aaa aaa aaa ccc ddd uuu")
val map01 = mutable.Map[String, Int]()
list.foldLeft(map01)(count2)
println(map01)
}
def count2(map2: mutable.Map[String, Int], str: String): mutable.Map[String, Int] = {
val arr: Array[String] = str.split(" ")
for (elem <- arr) {
map2 += (elem -> (map2.getOrElse(elem, 0) + 1))
}
map2
}
运行结果为:

当然这种方式,还是显得太罗嗦了,还有更为简洁的方式,而且还可以结果进行正序或逆序排序
简单一句就是:
val result = list.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(s => (s._1,s._2.size))
显然不容易懂,下面是详细说明
object Demo_019_01 {
def main(args: Array[String]): Unit = {
val list = List("bigdata han hello ", "bigdata han aaa aaa aaa ccc ddd uuu")
// val result2 = list.flatMap((x: String) => x.split(" "))
val result2 = list.flatMap(_.split(" "))
println("result2:"+result2)
// val result3 = result2.map((x: String) => (x, 1))
val result3 = result2.map((_,1))
println("result3:"+result3)
// val result4 = result3.groupBy((x: (String, Int)) => x._1)
val result4 = result3.groupBy(_._1)
println("result4:"+result4)
// val result5 = result4.map((s: (String, List[(String, Int)])) => (s._1, s._2.size))
val result5= result4.map(s => (s._1,s._2.size))
println("result5:"+result5)
// val result6 = result5.toList.sortBy((x: (String, Int)) => x._2).reverse
val result6 = result5.toList.sortBy(_._2)
println("result6:"+result6)
}
}
输出结果为

上面使用了参数类型推断,关于参数类型推断,介绍如下

Scala中做简易wordCount的更多相关文章
- 第87讲:scala中使用For表达式做查询
今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...
- scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- Scala 中 构造函数,重载函数的执行顺序
在调试scala在线开发教程(http://www.imobilebbs.com/wordpress/archives/4911)的过程中看到了以下代码,但是这段代码无论怎么调试都无法成功. abst ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala中的构造器和高阶函数
构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...
- Scala中的If判断&While&For循环
If 判断: object TestScalaIf { def main(args: Array[String]): Unit = { // val resutlt = judge1(-100) // ...
- scala中的call-by-name和call-by-value
http://www.jianshu.com/p/93eefcb61d4f val和def的区别 在scala中,可以用val和def前缀来定义变量,例如: val x = 1 def y = &qu ...
随机推荐
- C++与正则表达式入门
什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本, 当你想要判断许多字符串是否符合某个特定格式:当你想在一大段文本中查找出所有的日期和时间:当你想要修改大量日志中所有的时间格式,在这些情 ...
- web自动化 -- js操作(滑动屏幕、修改页面)
一.selenium对 js 的操作方法 1.先定义 js 操作 或者 定义 目标元素 2.执行 js 操作: driver.execute_script(js操作) 或者 ...
- Vue开启gzip压缩文件
在你的项目使用了Vue的路由懒加载.Vue使用CDN引用项目组件,减少项目体积 后,还是觉得项目加载速度慢,效果不尽如人意的时候,还有一个“瘦身项目”可以完成,那就是利用nginx和webpack来使 ...
- 离线安装 docker
1.基础环境 操作系统:CentOS 7.8 docker 版本:18.06.1 2.docker 下载 2.1 官方地址 https://download.docker.com/linux/stat ...
- JPA第二天
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springdata"获取视频和教程资料! b站在线视 ...
- PHP link() 函数
定义和用法 link() 函数创建一个从指定名称连接的现存目标文件开始的硬连接. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 link(target,link) 参数 描述 ...
- PHP serialize() 函数
serialize() 函数用于序列化对象或数组,并返回一个字符串.高佣联盟 www.cgewang.com serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型 ...
- PHP is_resource() 函数
is_resource() 函数用于检测变量是否为资源类型. PHP 版本要求: PHP 4, P+-HP 5, PHP 7高佣联盟 www.cgewang.com 语法 bool is_resour ...
- PHP vfprintf() 函数
实例 把一些文本写入到名为 "test.txt" 的文本文件: <?php高佣联盟 www.cgewang.com$number = 9;$str = "Beiji ...
- synchronized的锁升级/锁膨胀
偏向锁 偏向第一个拿到锁的线程. 即第一个拿到锁的线程,锁会在对象头 Mark Word 中通过 CAS 记录该线程 ID,该线程以后每次拿锁时都不需要进行 CAS(指轻量级锁). 如果该线程正在执行 ...