Kotlin学习三:集合与Lambda

List 创建于遍历

创建一个只能读的集合,不能添加、修改或删除集合内容:

        val myList = listOf("A", "B", "C")
        for (i in 0 until myList.size) {
            Log.w("列表", "" + myList.get(i))
        }

创建一个可以修改的集合:

        val myList = mutableListOf("A", "B", "C")
        myList.add("D")
        for (i in 0 until myList.size) {
            Log.w("列表", "" + myList.get(i))
        }

Map使用

创建,存数据和取数据:

        //创建
        val myMap = HashMap<Int, String>()
        //添加数据
        myMap[1] = "A"
        myMap[2] = "B"
        myMap[3] = "C"
        //取出数据
        val value = myMap[2]
        Log.w("取出数据", "" + value)

也可以这么写:

        //创建
        val myMap = mutableMapOf(1 to "A", 2 to "B", 3 to "C")
        //添加数据
        myMap[8] = "X"
        //取出数据
        for ((myK, myV) in myMap) {
            Log.w("取出数据", "key:" + myK + ",value:" + myV)
        }

前面没有 mutable 是仅仅可以读,有 mutable 是可以修改的。

Lambda 表达式

Lambda 表达式是一个带有参数的表达式。

语法结构:{ 参数名1:参数类型,参数名2:参数类型 -> 函数体 }

简单理解为可以传入一段代码的方法。一般自己写方法,只能传入参数然后在方法体做处理,而 Lambda 是可以传一段代码做处理。

举一个简单的例子,我想取一个列表中最长的一个数据:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val lambda = { name: String -> name.length }
        val maxLength = myList.maxBy(lambda)
        Log.w("取出最长", "" + maxLength)

可以简化为:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val maxLength = myList.maxBy({ name: String -> name.length })
        Log.w("取出最长", "" + maxLength)

kotlin 规定,最后一个参数为 lambda 时,可以将 lambda 放在外面,然后省略() ,所以是这样:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val maxLength = myList.maxBy{ name: String -> name.length }
        Log.w("取出最长", "" + maxLength)

因为 lambda 只有一个参数,所以参数可以省略,用 it 关键字代替,所以是这样:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val maxLength = myList.maxBy { it.length }
        Log.w("取出最长", "" + maxLength)

再举个例子,想把内容都变为大写,用到 map 函数:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val newList = myList.map { it.toUpperCase() }
        for (value in newList) {
            Log.w("值为", value)
        }

上面的 map 函数可以将列表中每个元素映射为其它的值。

使用 filter 函数过滤长度为4以内的内容,并且都转化为大写的:

        val myList = listOf("aA", "BBBbb", "CCcc")
        val newList = myList.filter { it.length < 5 }.map { it.toUpperCase() }
        for (value in newList) {
            Log.w("值为", value)
        }

filter 可以过滤集合中的数据。

any 函数:判断集合中是否有至少一个满足条件;

all 函数:判断集合中是否所有元素满足条件;

        val myList = listOf("aA", "BBBbb", "CCcc")
        val mAny = myList.any { it.length > 3 }
        val mAll = myList.all { it.length > 3 }
        Log.w("返回", "" + mAny + "," + mAll)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值