Kotlin – 集合操作概述
Kotlin 标准库提供了广泛的函数来对集合执行操作。它包括简单的操作,如获取或添加元素,也包括更复杂的操作,如搜索、排序、过滤等。
成员和扩展功能 -
集合操作以两种方式声明:
- 成员函数
- 扩展功能
成员函数——
它定义了集合类型所必需的操作。例如,Collection 包含用于检查其是否为空的函数isEmpty() ; List 包含get()用于对元素进行索引访问,等等。
我们必须在创建自己的集合接口实现时实现成员函数。为了更容易地创建新的实现,我们可以使用 Kotlin 标准库中集合接口的骨架实现,例如AbstractList 、 AbstractSet 、 AbstractMap以及它们的可变对应物。
扩展函数——
除了成员函数之外的所有操作都被声明为扩展函数。其中一些是过滤、转换、排序和其他集合处理功能。
常见操作——
通用操作可用于可变集合(读取和写入)和只读。常见操作分为以下几类:
- 转型
- 过滤
- 加号和减号运算符
- 分组
- 检索收集部件
- 检索单个元素
- 订购
- 聚合操作
上面讨论的所有操作都返回它们的结果,而不影响集合的原始内容。例如,当我们应用于过滤操作时,它会生成一个新集合,其中包含与过滤谓词匹配的所有元素。这些操作的结果应该存储在变量中,或者可以传递给其他函数。
使用过滤器操作的 Kotlin 程序 –
Kotlin
fun main() {
val str = mutableListOf("Geeks", "for", "Geeks", "A", "Computer", "Portal")
// original collection remains same
str.filter { it.length > 4 }
println("Original collection elements still unchanged $str")
// result is stored in newStr
val newStr = str.filter { it.length > 4 }
println("New Collection obtains after filtering $newStr")
}
Kotlin
fun main() {
val str = listOf("Geeks", "for", "Geeks", "A", "Computer", "Portal")
//destination object
val filterResults = mutableListOf()
str.filterTo(filterResults) { it.length > 5 }
str.filterIndexedTo(filterResults) { index, _ -> index == 0 }
// filterResults contains results of both operations
println("Combined Result of both operations $filterResults")
}
Kotlin
fun main() {
val str = listOf("Geeks", "for", "Geeks", "A", "Computer", "Portal")
// filter strings right into a new hash set,
// and eliminating duplicates in the result
val result = str.mapTo(HashSet()) { it.length }
// print hashset
println("Only Distinct item length return by hashset $result")
}
Kotlin
fun main() {
val units = mutableListOf("Ten","Hundred","Thousand","Lakh","Crore")
// sorted() creates new collection and sort
val sortedNumbers = units.sorted()
println(units == sortedNumbers) // false
// sort() sort in same collection
units.sort()
println(units == sortedNumbers) // true
}
输出:
Original collection elements still unchanged [Geeks, for, Geeks, A, Computer, Portal]
New Collection obtains after filtering [Geeks, Geeks, Computer, Portal]
对于有限的收集操作,我们可以指定目标对象,它是可选的。 Destination 应该是可变集合,函数将其结果项添加到该集合中,而不是在新对象中返回它们。要对目的地执行这些操作,我们可以在名称中使用 To 后缀符号来分隔函数,例如,使用filterTo()而不是filter() 。
Kotlin 使用目标对象的程序——
科特林
fun main() {
val str = listOf("Geeks", "for", "Geeks", "A", "Computer", "Portal")
//destination object
val filterResults = mutableListOf()
str.filterTo(filterResults) { it.length > 5 }
str.filterIndexedTo(filterResults) { index, _ -> index == 0 }
// filterResults contains results of both operations
println("Combined Result of both operations $filterResults")
}
输出:
Combined Result of both operations [Computer, Portal, Geeks]
正如我们上面讨论的,我们可以将集合操作结果传递给另一个函数,这些函数将目标集合返回回来,因此我们可以在函数调用的相应参数中直接创建它:
Kotlin 将结果存储在 Hashset 中的程序 -
科特林
fun main() {
val str = listOf("Geeks", "for", "Geeks", "A", "Computer", "Portal")
// filter strings right into a new hash set,
// and eliminating duplicates in the result
val result = str.mapTo(HashSet()) { it.length }
// print hashset
println("Only Distinct item length return by hashset $result")
}
输出:
Only Distinct item length return by hashset [1, 3, 5, 6, 8]
写操作——
还有一些写操作可以在可变集合的情况下改变集合状态。这些操作包括添加、删除和更新集合中的元素。写操作在 List 特定操作和 Map 特定操作的 Write 操作和相应部分中列出。
对于特定的操作,有成对的函数用于对集合执行相同的操作:第一个可以在原地应用操作,即在原始集合中执行操作,另一个将结果作为新的单独集合返回。
例如:在应用sort()操作时,它会就地对可变集合进行排序,因此它的状态会发生变化,但在sorted()操作的情况下,它会创建一个新集合,其中包含排序顺序中的相同元素。
Kotlin 程序使用 sort() 和 sorted() 操作——
科特林
fun main() {
val units = mutableListOf("Ten","Hundred","Thousand","Lakh","Crore")
// sorted() creates new collection and sort
val sortedNumbers = units.sorted()
println(units == sortedNumbers) // false
// sort() sort in same collection
units.sort()
println(units == sortedNumbers) // true
}
输出:
false
true