集合可以方便你处理一组数据,也可以作为值参传给函数,和我们学过的其他变量类型一样,List、Set和Map类型的变量,也分为两种,只读和可变
。
List创建与元素获取
val list = listOf("Jack","Rose","Lee") println(list.getOrElse(3) { "Unknown" }) println(list.getOrNull(3) ) println(list.getOrNull(3) ?: "Unknown1")
|
可变列表
在Kotlin中,支持内容修改的列表叫可变列表,要创建可变列表,可以使用mutableListOf函数。List还支持toList和toMutableList函数动态实现只读列表和可变列表的相互转换
。
val mutableList = mutableListOf("Jack", "Rose", "Lee") mutableList.add("Jimmy") mutableList.remove("Lee") val toMutableList = list.toMutableList()
|
mutator函数
- 能修改可变列表的函数有个统一的名字: mutator函数
- 添加元素运算符与元素删除运算符(+= 、-=)
- 基于lambda表达式指定的条件删除元素
val mutableList = mutableListOf("Jack", "Rose", "Lee") mutableList += "Carl" println(mutableList) mutableList -= "Rose" println(mutableList) mutableList.removeIf { it.contains("J") } println(mutableList)
|
集合遍历
val list = listOf("Jack","Rose","Lee") for (s in list) { println(s) }
|
list.forEach{ println(it) }
|
list.forEachIndexed { index, s -> println("$index,$s") }
|
解构语法过滤元素
val list = listOf("Jack","Rose","Lee") val (origin,_,proxy) = list
|
使用_
符号过滤不需要的元素
Set创建与元素获取
- 通过setOf创建set集合,使用elementAt函数读取集合中的元素
val set = setOf("Jack", "Rose", "Lee", "Jack") println(set) println(set.elementAt(2))
|
可变集合
通过mutableSetOf创建可变的set集合
val mutableSetOf = mutableSetOf("Jack", "Rose", "Lee", "Jack") mutableSetOf.add("Jack") mutableSetOf += "Chen" println(mutableSetOf)
|
集合转换
val list = listOf("Jack", "Rose", "Lee", "Jack") .toSet() .toList() println(list)
|
val list = listOf("Jack", "Rose", "Lee", "Jack") .distinct() println(list)
|
数组类型
Kotlin提供各种Array,虽然是引用类型,但是可以编译成Java基本数据类型
数组类型 |
创建函数 |
IntArray |
intArrayOf |
DoubleArray |
doubleArrayOf |
LongArray |
longArrayOf |
ShortArray |
shortArrayOf |
ByteArray |
byteArrayOf |
FloatArray |
floatArrayOf |
BooleanArray |
booleanArrayOf |
Array |
arrayOf |
Map集合
- to看上去像关键字,但事实上,他是省略了点号和符号的特殊函数,to函数将它左边和右边的值转成一对Pair
val map = mapOf("Jack" to 20, "Jason" to 21, "Lee" to 30) mapOf(Pair("Carl",20))
|
读取Map的值
- [] 取值运算符,读取键对应的值,如果键不存在就返回null
- getValue,读取键对应的值,如果键不存在就抛出异常
- getOrElse,读取键对应的值,或者使用匿名函数返回默认值
- getOrDefault,读取键对应的值,或者返回默认值
println(map["Lee"]) println(map.getValue("Jason")) println(map.getOrElse("Rose") { "Unknown" }) println(map.getOrDefault("Jira", 0))
|
遍历
val map = mapOf("Jack" to 20, "Jason" to 21, "Lee" to 30) map.forEach{ println("${it.key}, ${it.value}") }
map.forEach {(key,value) -> println("$key, $value") }
|
可变集合
- 通过mutableMapOf创建可变的Map
- getOrPut键值不存在,就添加并返回结果,否则就返回已有键对应的值
val mutableMap = mutableMapOf("Jack" to 20, "Jason" to 21, "Lee" to 30) mutableMap += "Lisa" to 16 mutableMap.put("Jimmy",22) mutableMap["Chris"] = 28
|
mutableMap.getOrPut("Rose"){ 18 } println(mutableMap)
|