scala学习之scala中一些集合的常用函数
scala学习
集合常用函数
集合的基本属性与常用操作
长度、大小、循环遍历、迭代器、生成字符串、是否有包含等
object TestSetFunction {def main(args: Array[String]): Unit = {val list = List(1,2,3,4,5,6,7,8,9)// 长度println(list.length)// 集合大小println(list.size)//遍历list.foreach(println)// 迭代器for (item <- list){println(item)}// 生成字符串println(list.mkString(","))// 判断是否包含println(list.contains(5))} } /**输出结果为: 9 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1,2,3,4,5,6,7,8,9 true **/
衍生集合的操作
这些操作基于原始集合生成新集合
// 设置集合val numList=List(1,2,3,4)val abList = List(3,4,5,6)
获取集合头/尾:
// 获取集合头println(numList.head)// 获取集合尾(集合尾指出了集合头以外的全部元素println(numList.tail)// 集合的最后一个数据println(numList.last)// 集合的初始数据(除了最后一个数据println(numList.init) /** 1 List(2, 3, 4) 4 List(1, 2, 3) **/
反转集合
// 反转println(numList.reverse) /** List(4, 3, 2, 1) **/
取(去)前(后)n个元素
// 取前后n个元素println(numList.take(2))println(numList.takeRight(2))// 去掉前后n个元素println(numList.drop(2))println(numList.dropRight(2)) /** List(1, 2) List(3, 4) List(3, 4) List(1, 2) **/
交、并、差集
// 并集println(numList.union(abList))// 交集println(numList.intersect(abList))// 差集println(numList.diff(abList)) /** List(1, 2, 3, 4, 3, 4, 5, 6) List(3, 4) List(1, 2) **/
拉链(PS:当两个集合的元素个数不相等的时候,会将同等数量的熟进行拉连,多余的数据省略不用
// 拉链println(numList.zip(abList)) /** List((1,3), (2,4), (3,5), (4,6)) **/
滑窗
// 滑窗(第一个参数尾滑窗尺寸,第二个参数为步幅)val list = List(1,2,3,4,5,6,7,8,9)list.sliding(3,2).foreach(println) /** List(1, 2, 3) List(3, 4, 5) List(5, 6, 7) List(7, 8, 9) **/
集合计算的初级函数
一些对集合的计算的简单函数:
object TestSetFunction2 {def main(args: Array[String]): Unit = {val list = List(1,2,3,4,5,-12)//求和println(list.sum)//求乘积println(list.product)//求最大值println(list.max)//最小值println(list.min)//排序// 按元素大小排序println(list.sortBy(x => x))// 按元素大小绝对值排序println(list.sortBy(x => x.abs))// 按元素大小升序降序println(list.sortWith((x,y) => x<y))// 按元素大小降序排列println(list.sortWith((x,y)=>x>y))} } /** 3 -1440 5 -12 List(-12, 1, 2, 3, 4, 5) List(1, 2, 3, 4, 5, -12) List(-12, 1, 2, 3, 4, 5) List(5, 4, 3, 2, 1, -12) **/
集合计算高级函数
诸如过滤、映射、扁平化等一系列操作
object TestAdvancedFunction {def main(args: Array[String]): Unit = {val list = List(1,2,3,4,5,6,7,8,9)val doubleList = List(List(1,2,3,4),List(5,6,7,8),List(9,10))val wordList = List("a b c","d e f g","12 13 14")// 过滤println(list.filter(x => x%2==0))//映射println(list.map(x=>x*10))// 扁平化println(doubleList.flatten)//扁平化加映射(PS:这种方法相当于先进行map操作然后进行flatten操作)println(wordList.flatMap(x=>x.split(" ")))} } /** List(2, 4, 6, 8) List(10, 20, 30, 40, 50, 60, 70, 80, 90) List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) List(a, b, c, d, e, f, g, 12, 13, 14) **/
reduce方法
reduce简化(规约):通过指定的逻辑将集合中的数据进行聚合,从而减少数据最终获得结果
- 从源码的角度来说,reduce其实就是调用了reduceLeft方法。
object TestReduce {def main(args: Array[String]): Unit = {val list = List("1","2","3","4")val i = list.reduce((x,y)=>x+y)println(i)//reduceLeft和reduceRightprintln(list.reduceLeft((x,y)=>x+y))println(list.reduceRight((x,y)=>x+y))} } /** 1234 1234 1234 **/
flod方法
- flod就是一个带有初始值的reduce方法,他使用了函数柯里化,有两个参数列表
- 第一个参数即为初始值
- 第二个参数就是处理流程(处理方式)
object TestFold {def main(args: Array[String]): Unit = {val list=List("a","b","c","d")println(list.fold("start")((x,y)=>x+y))// 与reduce类似的,flod本质上调用的flodLeft方法println(list.foldLeft("start")((x,y)=>x+y))} } /** startabcd startabcd **/
- flod就是一个带有初始值的reduce方法,他使用了函数柯里化,有两个参数列表
通过scala集合实现简单的wordCount
- 思路,先用flatmap方法对每个字符串进行切分然后展开,再对每个相同单词进行归并
- 然后对单词计数即可。
object TestWordCount {def main(args: Array[String]): Unit = {val list = List("Just test a word count","word count","just a test","test a word count")// 首先将每个句子分隔成单词val l1=list.flatMap(x=>x.split(" "))// 相同单词合并val l2 = l1.groupBy(word => word)// 计数val l3 = l2.map(tuple => (tuple._1, tuple._2.size))// 对计数结果做排序val result = l3.toList.sortWith((left, right)=>left._2 > right._2)// 输出结果println(result)} } /** List((test,3), (count,3), (a,3), (word,3), (just,1), (Just,1)) **/
通过scala实现相对复杂的wordcount案例:
- list中为一个一个的元组,元组中有两个元素,一个是一句包含一个以上单词的句子,第二个元素为一个整数,表示该句子出现的次数。
- 实现思路,通过flatmap将每个元组中的句子单独裁开,统计出现次数后进行group操作,然后再进行reduce操作求和,得到结果。
object TestWoedCount2 {def main(args: Array[String]): Unit = {val tuples = List(("Remilia Scarlet is best",3),("Remilia Scarlet and Frandre Scarlet are the sisters",2),("They are not twins",4))// 第一步,对每一个元组中的句子进行split并与出现次数相组合、获得一个词,次数的元组列表val words = tuples.flatMap{t => {val wordlist = t._1.split(" ")wordlist.map(word => (word,t._2))}}//按每个元组的词进行排序:words.sortBy(x => x._1)//相同单词进行归并val groups = words.groupBy(x => x._1)// 每个单词进行求和val resultMap = groups.map{x => {val word = x._1val value = x._2.reduce((a,b) => (a._1,a._2+b._2))(word,value)}}// 解除map嵌套并排序val result = resultMap.map(x=>x._2).toList.sortBy(-_._2)println(result)} } /** 输出结果: List((Scarlet,7), (are,6), (Remilia,5), (They,4), (twins,4), (not,4), (is,3), (best,3), (Frandre,2), (sisters,2), (and,2), (the,2)) **/
- 以上过程可以免除过多变量的问题,直接写成:
object TestWoedCount2 {def main(args: Array[String]): Unit = {val tuples = List(("Remilia Scarlet is best",3),("Remilia Scarlet and Frandre Scarlet are the sisters",2),("They are not twins",4))val result = tuples.flatMap{t => {val wordlist = t._1.split(" ")wordlist.map(word => (word,t._2))}}.sortBy(x => x._1).groupBy(x => x._1).map{x => {val word = x._1val value = x._2.reduce((a,b) => (a._1,a._2+b._2))(word,value)}}.map(x=>x._2).toList.sortBy(-_._2)println(result)} } /** 输出结果同上 **/
并行集合
- scala为了充分利用多核cpu,提供了并行集合,用于多喝环境的并行计算
- 语法:
- 普通集合:
(0 to 20).map{case _ => Thread.currentThread.getName}
- 并行集合:
(0 to 20).par.map{case _ => Thread.currentThread.getName}
- 结果:
- Vector(main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main, main)
- ParVector(ForkJoinPool-1-worker-13, ForkJoinPool-1-worker-13, ForkJoinPool-1-worker-3, ForkJoinPool-1-worker-3, ForkJoinPool-1-worker-3, ForkJoinPool-1-worker-7, ForkJoinPool-1-worker-7, ForkJoinPool-1-worker-5, ForkJoinPool-1-worker-5, ForkJoinPool-1-worker-5, ForkJoinPool-1-worker-11, ForkJoinPool-1-worker-11, ForkJoinPool-1-worker-1, ForkJoinPool-1-worker-1, ForkJoinPool-1-worker-1, ForkJoinPool-1-worker-9, ForkJoinPool-1-worker-9, ForkJoinPool-1-worker-9, ForkJoinPool-1-worker-15, ForkJoinPool-1-worker-15, ForkJoinPool-1-worker-15)
- 普通集合:
scala学习之scala中一些集合的常用函数相关推荐
- matlab数米粒实验报告,文化学习上机实验中遇到的一些Matlab函数.ppt
文化学习上机实验中遇到的一些Matlab函数.ppt 上机实验中遇到的一些Matlab函数,(1)* .* . (2)abc linspace(a,b,c) (3)log log10 (4)exp ( ...
- 大数据HiveSQL学习笔记三-查询基础语法以及常用函数
大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...
- php 与时间有关的函数,php中与时间相关的常用函数有哪些
php中与时间相关的常用函数有:date_default_timezone_set().date_create().date_diff().date_timestamp_get().strtotime ...
- Python中numpy.linalg库常用函数
Python中numpy.linalg库常用函数 numpy.linalg Python中numpy.linalg库常用函数 简单记录所遇到的numpy库内置函数 矩阵与向量积 ①np.linalg. ...
- Scala学习(一)--Scala基础学习
Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...
- Scala学习--《Scala编程》
2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长) 第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...
- mysql学习总结-初识+数据管理+增删改查+常用函数+事务理解+数据库设计+JDBC引入
1.初识MySQL 1.1数据库的定义 数据库(DataBase,简称DB),是一个按数据结构来存储和管理数据的计算机软件系统.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制 ...
- [Dart] Flutter开发中的几个常用函数
几个Flutter开发中的常用函数 /** 返回当前时间戳 */static int currentTimeMillis() {return new DateTime.now().millisecon ...
- Python中处理字符串的常用函数汇总【文末送书】
正式的Python专栏第23篇,同学站住,别错过这个从0开始的文章! 今天我们说了字符串的基础,格式化,这次我们讲解字符串的常用函数,不要错过! (文本送书,评论区抽取一位送书) 前两篇都在本文同个专 ...
最新文章
- LeetCode每日训练2—有序矩阵中第K小的元素(7.2)
- http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1895 二分
- JAVA开发需求分析套路_毕设做什么好?感觉都是套路了
- ansible 第四次作业
- tcp 三次握手连接
- 【dede】列表页调用二三级导航栏
- 如何批量给 Word、Excel、PDF、PPT 文档设置文件打开密码和删除密码
- 关于新手做ASO的一些方法和技巧
- 终于不用早起抢菜了?GitHub 买菜插件出世开源了!
- Windows11/10 使用RDP远程桌面时提示 您的凭据不工作/登录没有成功可能的一种原因
- Java Swing图书管理系统桌面软件附源码
- fft理解-cooley turkey
- 从梯度下降到 Adam!一文看懂各种神经网络优化算法
- 基于TCP/UDP的P2P网络通信协议研究与实现
- jQuery_03_操作HTML和CSS
- 微软云服务器怎么注销,Microsoft 账户删除及注销
- 模具设计如何能够快速入门
- 良心推荐的一些Chrome插件
- c语言课设报告 中南,中南大学c语言课程实践报告
- 马斯克怒了:我要起诉微软!
热门文章
- 【Linux】-关于Linux的指令(上)
- Matlab方根运算
- pyspark.sql.functions.lit(col)
- *每日一题(三零)var a = 10 var foo={ a:20, bar:function(){ var a=30 return this.a
- C++重载双目运算符
- C语言青蛙过河游戏超详细教程【附源码】
- Fyne 折腾手记:开发一个简易桌面应用
- WordPress修改默认邮箱、用户名(图解)
- Ernie-SimCSE对比学习在内容反作弊上应用
- 记一个rabbitmq启动失败解决方案