《在飞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语言,希望我的博客对你有帮助!

相关源码  

有问题可联系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
                }
            }
        }


 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值