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)