《在飛Android Kotlin快速入門-集合篇1》
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語言,希望我的部落格對你有幫助!
====
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 [email protected] {
if (it.pid == android.os.Process.myPid()) {
if (it.processName != null) {
[email protected]
}
}
}