hi,各位亲:
这章主要讲Kotlin中集合的使用
在android开发中90%的集合使用到了上图中的这些集合,那么在Kotlin中是如何使用的呢?
一.List集合:
1.listOf()只读集合:
// listOf就是只读的list集合,不能动态add元素,只能在初始化的时候赋值
fun testReadList() {
var readList = listOf<String>("a", "b", "c", "d", "e", "f")
//1.常用读取
val value1 = readList.get(1)
//2.常用读取
val value2 = readList[1]
//3.获取Index
val indexOf = readList.indexOf("b")
Log.e("fffpzf", "位置为1的数值value1:$value1,位置为1的数值value2:$value2,数值是b对应的index:$indexOf")
readList.forEach {
//遍历list
Log.e("fffpzf", "遍历readList:$it")
}
}
===
E/fffpzf: 位置为1的数值value1:b,位置为1的数值value2:b,数值是b对应的index:1
遍历readList:a
遍历readList:b
遍历readList:c
遍历readList:d
遍历readList:e
遍历readList:f
===
2.可变的list集合:
//mutableListOf就是一个可变长度的list集合
fun testMutableListOf() {
val mutableListOf = mutableListOf<String>()
mutableListOf.add("a")
mutableListOf.add("b")
mutableListOf.add("c")
mutableListOf.add("d")
//1.常用读取
val value1 = mutableListOf.get(1)
//2.常用读取
val value2 = mutableListOf[1]
//3.获取Index
val indexOf = mutableListOf.indexOf("b")
Log.e("fffpzf", "位置为1的数值value1:$value1,位置为1的数值value2:$value2,数值是b对应的index:$indexOf")
mutableListOf.forEach {
//遍历list
Log.e("fffpzf", "遍历MutableListof:$it")
}
}
===
位置为1的数值value1:b,位置为1的数值value2:b,数值是b对应的index:1
遍历MutableListof:a
遍历MutableListof:b
遍历MutableListof:c
遍历MutableListof:d
===
二.set集合
1.setOf()只读集合:
//setOf()只可读的set集合
fun testReadSet() {
val setOf = setOf<String>("set_a", "set_b", "set_c")
setOf.forEach {
if (it == "set_a") Log.e("fffpzf", "获取到:set_a") else Log.e("fffpzf", "我是:$it")
}
}
===
E/fffpzf: 获取到:set_a
我是:set_b
我是:set_c
===
2.mutableSetOf可变的set集合:https://blog.csdn.net/pangzaifei/article/details/84978663
// mutableSetOf()长度可变的set集合
fun testMutableSet() {
val setOf = mutableSetOf<String>()
setOf.add("set_a")
setOf.add("set_b")
setOf.add("set_c")
setOf.forEach {
if (it == "set_a") Log.e("fffpzf", "获取到:set_a") else Log.e("fffpzf", "我是:$it")
}
}
===
E/fffpzf: 获取到:set_a
我是:set_b
我是:set_c
===
三:Map集合
1.mapOf()只可读的map集合 转载请注明出处:https://blog.csdn.net/pangzaifei/article/details/84978663
//map中定义key:value需要使用关键字 to
fun testMapOf() {
val mapOf = mapOf<String, String>("a" to "map1", "b" to "map2", "c" to "map3")
//获取value形式1
val value1 = mapOf["a"]
//获取value形式2
val value2 = mapOf.get("a")
//获取keys集合
val keys = mapOf.keys
//获取values集合
val values = mapOf.values
Log.e("fffpzf", "value1:$value1,value2:$value2,keys:$keys,values:$values")
//遍历
mapOf.forEach {
Log.e("fffpzf", "遍历mapOf:key=${it.key},value=${it.value}")
}
}
===
value1:map1,value2:map1,keys:[a, b, c],values:[map1, map2, map3]
遍历mapOf:key=a,value=map1
遍历mapOf:key=b,value=map2
遍历mapOf:key=c,value=map3
===
2.mutableMapof()可变的map集合
//map中定义key:value需要使用关键字 to
fun testMutableMapOf() {
// val mapOf = mapOf<String, String>("a" to "map1", "b" to "map2", "c" to "map3")
val mutableMapOf = mutableMapOf<String, String>()
mutableMapOf.put("a", "map1")
mutableMapOf.put("b", "map2")
mutableMapOf.put("c", "map3")
//获取value形式1
val value1 = mutableMapOf["a"]
//获取value形式2
val value2 = mutableMapOf.get("a")
//获取keys集合
val keys = mutableMapOf.keys
//获取values集合
val values = mutableMapOf.values
Log.e("fffpzf", "value1:$value1,value2:$value2,keys:$keys,values:$values")
//遍历
mutableMapOf.forEach {
Log.e("fffpzf", "遍历mutableMapOf:key=${it.key},value=${it.value}")
}
}
===
value1:map1,value2:map1,keys:[a, b, c],values:[map1, map2, map3]
遍历mutableMapOf:key=a,value=map1
遍历mutableMapOf:key=b,value=map2
遍历mutableMapOf:key=c,value=map3
===
关于集合遍历上面已经提到过一种使用.forEach{},还可以用for循环来遍历如下:
*:List集合遍历与map遍历一样,不再赘述
//遍历第一种
mutableMapOf.forEach {
Log.e("fffpzf", "遍历mutableMapOf:key=${it.key},value=${it.value}")
}
//遍历第二种
for (mutableEntry in mutableMapOf) {
Log.e("fffpzf", "key:${mutableEntry.key},value:${mutableEntry.value}")
}
===
遍历mutableMapOf:key=a,value=map1
遍历mutableMapOf:key=b,value=map2
遍历mutableMapOf:key=c,value=map3
key:a,value:map1
key:b,value:map2
key:c,value:map3
===
android Kotlin实际开发中常用的一些集合操作基本就上面这些。
*:java相关的集合操作不再赘述,比如arrayList,HashMap都是可以在kotlin中使用的
Ps:我是在飞~~,只有空闲时间才能更新博客,所以本系列偏快速入门,主要讲实战中经常用到内容,让你快速上手。所以文章尽量简短,敬请谅解,本系列文章默认阅读者已经熟悉java语言,希望我的博客对你有帮助!
有问题可联系q:1660380990邮箱1660380990@qq.com
====
2018218补充
1.一个方法中需要在for循环中if判断,满足条件直接return(将for结果return出方法)
fun getProcessName(context: Context): String? {
val am: ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
// var runningApps = mutableListOf<ActivityManager.RunningAppProcessInfo>()
var runningApps = am.runningAppProcesses
if (runningApps.isEmpty()) {
return null
}
for (proInfo: ActivityManager.RunningAppProcessInfo in runningApps) {
if (proInfo.pid == android.os.Process.myPid()) {
if (proInfo.processName != null) {
return proInfo.processName
}
}
}
return null
}
例如这个getProcessName()是返回一个String的字符串。但是结果需要在
for (proInfo: ActivityManager.RunningAppProcessInfo in runningApps) {
if (proInfo.pid == android.os.Process.myPid()) {
if (proInfo.processName != null) {
---> return proInfo.processName
}
}
}中拿到processName然后return出去。
遍历还有forEach{},如下也是可以的:
fun getProcessNameTest(context: Context): String? {
val am: ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
var runningApps = am.runningAppProcesses
runningApps.forEach {
if (it.pid == android.os.Process.myPid()) {
if (it.processName != null) {
return it.processName
}
}
}
return null
}
上面两种都是可以的,但是不建议用如下这种形式。大概率大家不会这么使用,也难免有人好奇在初学时使用,做个提醒
runningApps.forEach a@ {
if (it.pid == android.os.Process.myPid()) {
if (it.processName != null) {
return@a
}
}
}