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 ...
随机推荐
- Python程序设计(第3版)PDF高清完整版免费下载|百度网盘
百度网盘:Python程序设计(第3版)PDF高清完整版免费下载 提取码:48u4 内容简介 本书是面向大学计算机科学专业第一门程的教材.本书以Python语言为工具,采用相当传统的方法,强调解决问题 ...
- 修改了数据库文件可以识别是否最新,按数据库文件名20181217.db,日期名作文件名时间戳
修改了数据库文件可以识别是否最新,按数据库文件名20181217.db,日期名作文件名时间戳 压缩包device.rar上传到邮箱
- gitlab的还原
源服务器: ip: 192.168.0.199 系统:CentOS7.2 内核: 3.10.0-327 gitlab版本: gitlab-ce-8.0.5 新服务器: ip: 192.168.0.19 ...
- 【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!
写在前面 在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一.京东618.秒杀.抢购促销等,这些都是典型的大流量高并发场景.关于秒杀,小伙伴们可以参见我的另一篇 ...
- Python os.stat() 方法
概述 os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用.高佣联盟 www.cgewang.com 语法 stat()方法语法格式如下: os.stat(path) 参数 pat ...
- PHP substr_compare() 函数
实例 比较两个字符串: <?php高佣联盟 www.cgewang.comecho substr_compare("Hello world","Hello worl ...
- Vue无限滚动加载数据
Web项目经常会用到下拉滚动加载数据的功能,今天就来种草Vue-infinite-loading 这个插件,讲解一下使用方法! 第一步:安装 npm install vue-infinite-load ...
- luogu P3403 跳楼机 同余最短路
LINK:跳楼机 很早之前就想学的一个东西.发现这个东西果然神奇. 我们要找到 所有的 w满足 \(w=1+ax+by+cz\).且 \(1\leq w\leq h\) 暴力枚举是不行的. 做法是这样 ...
- mit-6.828 Lab01:Booting a PC Part2 理论知识
Part 2 目录 Part 2 学习理论知识 反汇编 扇区 BIOS 启动过程总结 Boot loader启动过程总结 A20 gate 读boot/boot.S 和 boot/boot.c源码 - ...
- Redis好文章推荐
文章来源:掘金 作者:敖丙 Redis-避免缓存穿透的利器之BloomFilter <我们一起进大厂>系列- Redis基础 <我们一起进大厂>系列-缓存雪崩.击穿.穿透 ...