目录

一.集合属性

size

获取集合的大小

list.size
length

获取集合的长度

list.length
contains

是否包含

val list = List[Int](3,7,2,9,10)
list.contains(100
mkString

转字符串,参数是元素的分隔符。

val list = List(1, 2, 3, 4)
println(list.mkString("-"))//结果:1-2-3-4

二.集合方法

drop、dropRight

删除前[后]多少个元素,保留剩下的元素

val list1 = list.drop(3)
val list2 = list.dropRight(3)
distinct:去重
head、last:获取第一个、最后一个元素
tail、init:去除第一个元素剩余的所有元素、去除最后一个元素剩余的所有元素、
isEmpty:是否为空
intersect、diff、union:交集、差集、并集
max、min:最大、最小值
sum:求和
reverse:反转
sliding(窗口长度,滑动步长)
tail:除开最后一个元素,返回剩余元素组成的集合
take(n):获取前多少个元素,TopN
求集合交集、并集、差集:intersect,diff,union
zip:拉链
val list14 = List[String]("name","age","address","sex","aa")
val list15 = List[Any]("zhangsan",20,"shenzhen","男")
val list16 = list14.zip(list15)
println(list16)// List((name,zhangsan), (age,20), (address,shenzhen), (sex,男))
unzip:反拉链

返回一个二元元祖,2个List

//list16:((name,zhangsan), (age,20), (address,shenzhen), (sex,男))
val list17 = list16.unzip
println(list17)//(List(name, age, address, sex),List(zhangsan, 20, shenzhen, 男))
sorted:升序
//排序,升序
val list1 = list.sorted
//降序
val list2 = list.sorted.reverse
sortBy:指定排序条件

默认升序

 val list3 = List[(String,Int)]( ("zhangsan",20),("lisi",30),("wangwu",15),("zhaoliu",5) )
val list = list3.sortBy(_._1)
sortWith:自定义升降序
// 函数体中< 代表是升序  >代表是降序
val list5 = list3.sortWith((x,y)=>x._2<y._2)
//升序
val list7 = list3.sortWith(_._2<_._2)
println(list7)//List((zhaoliu,5), (wangwu,15), (zhangsan,20), (lisi,30))
//降序
val list6 = list3.sortWith((x,y)=>x._2>y._2)
println(list6)//List((lisi,30), (zhangsan,20), (wangwu,15), (zhaoliu,5))

三.集合的高级函数(重要)

map:转换(一对一)

对list每个元素都执行一次,返回一个新的list

val list8 = List[String]("hello","word","python","hadoop")
val list9 = list8.map(x=>x.length)//List(5, 4, 6, 6) class Person(val name:String,val age:Int)
val list10 = List[(String,Int)]( ("zhangsan",20),("lisi",50),("wangwu",60))
val list11 = list10.map(x=> new Person(x._1,x._2))//List(对象一,对象二,对象三)
flatten:压平(一对多)

只压第二层

val list12 = List[List[String]] ( List("scala","python"),List("hadoop","flume","kafka") )
val list13 = list12.flatten////List("scala","python","hadoop","flume","kafka")
//string也属于Seq,可以被压平成字符
val list16 = List[String]("hello spark","hello scala")
val list17 = list16.flatten
println(list17) //List(h, e, l, l, o, , s, p, a, r, k, h, e, l, l, o, , s, c, a, l, a)
flatMap:转换+压平(一对多)

等价于先map,再flatten

val list16 = List[String]("hello python","hello scala","hadoop flume")
val list17 = list16.map(x=>x.split(" ")).flatten
println(list17)//List(hello, spark, hello, scala)
groupBy:(多对一)

根据自定义的规则进行分组,分组后的结果是一个Map,key是分组的条件,value是一个List

    val list = List(("Shenczhen", "zhagnsan", 20), ("guangzhou", "lisi", 10), ("Shenczhen", "wangwu", 30), ("Shenczhen", "zhaoliu", 20), ("chengdu", "wuqi", 10))
val map: Map[(String, Int), List[(String, String, Int)]] = list.groupBy(x => {
(x._1, x._3)
})
println(map) //Map((Shenczhen,30) -> List((Shenczhen,wangwu,30)),
//(chengdu,10) -> List((chengdu,wuqi,10)),
// (guangzhou,10) -> List((guangzhou,lisi,10)),...)
reduce:聚合(多对一)

迭代计算,本次计算的结果作为下次计算的输出

sum默认给的是集合的第一个值,然后从第二个元素开始遍历

从左往右

val list1 = List(1, 2, 3, 4)
val s = list1.reduce((sum, x)=>sum+x)
println(s)
flod(初始值)(函数):叠加(多对一)

从左往右

sum默认给的是集合的第一个括号参数的值,然后从第一个元素开始遍历

val i = list1.fold(0)((sum,x)=>sum+x)
println(i)
println(i)
filter

过滤,判断条件为True保留,返回过滤后的List集合

//找出集合中的偶数
val list1 = List(1, 2, 3, 4, 5)
val listfilter =list1.filter(x => {
x % 2 == 0
})
println(listfilter)//List(2, 4)

Scala(五)【集合的高级使用】的更多相关文章

  1. Scala进阶之路-高级数据类型之集合的使用

    Scala进阶之路-高级数据类型之集合的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala 的集合有三大类:序列 Seq.集 Set.映射 Map,所有的集合都扩展自 ...

  2. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  3. Scala进阶之路-高级数据类型之数组的使用

    Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...

  4. Scala:集合类型Collection和迭代器

    http://blog.csdn.net/pipisorry/article/details/52902549 Scala Collection Scala 集合分为可变的和不可变的集合. 可变集合可 ...

  5. Scala数组| 集合

    arrays :+ 5尾部   头部5 +: arrays TODO 声明不可变数组,不能删; 默认情况下,scala中集合的声明全都是不可变的 val arrays: Array[Int] = Ar ...

  6. scala 可变集合与内存清理的关系

    留坑待填 使用scala.collection.mutable._期间,发现了当程序运行内存开销较多时,使用系统工具进行内存清理,然后程序报出了变量找不到.内存无法访问.数组访问越界,堆栈溢出等多种错 ...

  7. Scala学习——集合的使用和“_”的一些使用(中)

    1.空格加_可以表示函数的原型 命令行代码: scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala ...

  8. scala集合和高级函数操作

    scala常用函数操作 reduceLeft   是将集合的元素从左向右进行所需要的相应操作,图以减法为例展示,表达的算法是 : 1-2-3-4-5 例: (1 to 5).reduceLeft(_ ...

  9. [转] Scala 的集合类型与数组操作

    [From] https://blog.csdn.net/gongxifacai_believe/article/details/81916659 版权声明:本文为博主原创文章,转载请注明出处. ht ...

随机推荐

  1. zabbix 监控redis 挂掉自动重启 并发送企业微信

    1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...

  2. vue-router 4 你真的熟练吗?

    虽然 vue-router 4 大多数 API 保持不变,但是在 vue3 中以插件形式存在,所以在使用时有一定的变化.接下来就学习学习它是如何使用的. 一.安装并创建实例 安装最新版本的 vue-r ...

  3. React 三大属性state,props,refs以及组件嵌套的应用

    React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ...

  4. sqlalchemy create single table

    User.__table__.drop(engine) User.__table__.create(engine) https://stackoverflow.com/a/45287771/80250 ...

  5. mysql 禁止外键检查

    SET FOREIGN_KEY_CHECKS=0; SET FOREIGN_KEY_CHECKS=1; from: https://stackoverflow.com/a/15501754/80250 ...

  6. FZU ICPC 2020 寒假训练 4 —— 模拟(一)

    P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...

  7. 问题 B: 喷水装置(二)(在c++上运行有错误,提交AC了)

    题目描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装 ...

  8. [noi795]保镖

    容易证明,最终方案一定是某一个排列无限循环,那么就要满足$\sum ai<=max(bi+ai)$,对所有数按照ai+bi排序后,枚举最大值,用权值线段树维护之前的ai最少要选几个 1 #inc ...

  9. [bzoj4650]优秀的拆分

    由于字符串是AABB的形式,枚举AA和BB中间的位置,分别考虑AA和BB的数量,乘起来sigma一下即为答案以下考虑AA的情况(BB同理),枚举A的长度,然后按照这个长度分为若干块,那么每一个A一定可 ...

  10. 如何用webgl(three.js)搭建处理3D园区、3D楼层、3D机房管线问题(机房升级版)-第九课(一)

    写在前面的话: 说点啥好呢?就讲讲前两天的小故事吧,让我确实好好反省了一下. 前两天跟朋友一次技术对话,对方问了一下Geometry与BufferGeometry的具体不同,我一下子脑袋短路,没点到重 ...