1. 程式人生 > >《在飛Android Kotlin快速入門-集合篇1》

《在飛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]
                }
            }
        }