1.23
集合 collection
集合分可变(mutalbe)、不可变(immutable)两种类型。
immutalbe类层次结构图
sort: .sorted
是自然序(升序),sortBy()
定义元素的序,如果实参是元组,则是定义分组排序。
sliding(size, step=1): 滑动切分集合,每组不超过size
个元素,每组起始元素是上一组起始元素的下step个元素(返回$\left\lceil \frac{coll.length}{step}\right\rceil$
组)。
grouped(size): 把集合拆分为每组不超过size
个元素的$\left\lceil\frac{coll.length}{size}\right\rceil$
组,效果等同于.sliding(size, size)。
java集合转Scala集合:import scala.collection.convert.ImplicitConversionsToScala._
有限集合zip一个常量,利用Stream.continually由一个常量生成一个无限集。xs.zip(Stream.continually(constant)),不可通过由常量生成的无限集zip有限集合,.zip(xs)
:_* 将集合展开,作为函数可变参数的实参
mutable.ListMap(2.12.0)(慎用) 声称是保存了插入顺序的map,然而保存的顺序和插入顺序相反(ListMap实现将其插到表头),而且,和immutable.ListMap(kv1, ....)在插入顺序行为上表现相反(也就说后者表现是预期的顺序)。两点不合理:1.表现顺序不合理;2.mutable和immutable行为表现不一致。这个类在不同的版本上行为表现都不尽相同,保存的插入顺序乱七八糟。
Set.intersect(Set)求出两set的交集
List.intersect(List)?
.distinct和.toSet都能生成不重复元素,二者开销差不多,前者能保留元素顺序(order preservation)。
.par并行集
.collect({case x if ... => x.yy}):当满足条件时返回映射结果,相当于联合filter().map(),找出满足条件的元素,同时进行映射
.toMap(implicit ev: A<:<(T,U))
其中<:<是
.withFilter是专为.map, .flatMap, .foreach 设计,不同于.filter,前者不会产生新集合,从而提高效率。
.partition(p:A=>Boolean)将集合内元素按谓词分为两部分,返回二元组的前者为满足谓词的元素集,后者为不满足的。
.span(p:A=>Boolean)相当于(c takeWhile p, c dropWhile p),不同于.partition。
mutable.OpenHashMap(open hash, 链址法) vs. HashMap(HashTable实现)
参数类型推断部分情况有bug,如<Array[String]>.toSet.map(_.trim),其中的下划线不能被推断出类型,造成编译不通过。
view
对有序列表进行数据操作,如果该数据操作中达到某种条件,则返回某种转换数据,并停止对列表中后续元素的匹配以避免计算浪费,有点类似.map().collectFirst,但这种组合操作不能避免后续元素的map操作。一种方式是对列表直接调用.collectFirst,传入的偏函数实参定义成显式的偏函数(同时定义 definedAt,apply)将数据操作中间状态放在字段中,在definedAt返回偏函数应用条件,在apply中对中间状态进行转换,返回想要的类型。另一种更流畅的调用方式是通过.view来实现,.view返回一个延迟计算的集合,在需要时才计算,也就说在遍历元素过程中遇到满足条件的元素前不会提前计算后续元素。.view.find()或 .view.filter().head
.view
产生的是一个延迟计算集合(或可遍历对象),和stream有区别,如调用filter时前者不一定会对每个元素进行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统