集合操作概述
Kotlin 标准库提供了大量的函数用来在集合上进行各种操作. 包括简单的操作, 比如获取元素, 添加元素, 以及更复杂的操作, 比如查找, 排序, 过滤(Filtering), 变换(Transformation), 等等.
扩展函数与成员函数
标准库中定义的操作有两类: 集合接口的 成员函数, 以及 扩展函数.
成员函数定义了的集合类型的基本操作. 比如, Collection
包含函数 isEmpty()
用来检查集合是否为空; List
包含 get()
函数, 用于按下标访问元素, 等等.
当你自己实现集合接口时, 你必须实现集合的成员函数. 为了更简单地实现集合, 你可以使用标准库中集合接口的框架实现类: AbstractCollection
, AbstractList
, AbstractSet
, AbstractMap
, 以及与它们对应的可变集合类.
其他集合操作声明为扩展函数. 包括过滤, 变换, 排序, 以及其他的集合处理函数.
共通操作
共通操作对 只读和可变集合 都有效. 共通操作包括以下几组:
这些章节中介绍的集合操作返回的结果不会影响原来的集合. 比如, 过滤操作会产生一个 新集合, 其中包含符合过滤条件的所有元素. 因此, 这些操作的结果需要保存在变量中, 或者通过其他方式使用, 比如作为参数传递给其他函数.
对某些集合操作, 可以指定 目标 对象. 这里的目标集合是一个可变的集合, 集合操作函数会将结果添加到目标集合中, 而不是创建新的集合作为返回值. 要使用目标集合来进行操作, 需要使用其他函数, 函数名带有 To
后缀, 比如, 要使用 filterTo()
而不是 filter()
, 或者使用 associateTo()
而不是 associate()
. 这些函数接受一个额外的参数来指定目标集合.
为了方便使用, 这些函数会将目标集合作为返回值, 因此你可以在调用这些函数的参数中直接创建目标函数的实例:
带目标集合的函数可以用来执行过滤, 关联(associate), 分组, 压扁(flatten), 以及其他操作. 关于带目标集合的所有操作, 请参见 Kotlin 集合 API 文档.
写入操作
对于可变的集合, 还有 写操作 可以改变集合的状态. 这类写操作包括添加元素, 删除元素, 以及变更元素. 关于写入操作的详情, 请参见 集合写入操作, 以及 List 相关操作 和 Set 相关操作 中对应的章节.
对于特定的写入操作, 存在一对函数用来执行相同的操作: 一个函数直接在原来的集合上进行变更, 另一个则将变更后的结果作为新的集合返回, 而不影响原来的集合. 比如, sort()
函数直接对一个可变集合进行排序, 因此集合状态会发生变化; 而 sorted()
函数则会创建一个新的集合, 其中包含相同的元素排序后的结果, 而原来的集合不会变化.