文章目录
一. 集合
1. 安全获取集合元素
List.getOrElse(index: Int, defaultValue: (Int) -> T): T 函数原型 :
List.getOrNull(index: Int): T? 函数原型 :
2. mutableList
- 添加元素运算符 += 和 删除元素运算符 -=
运算符重载 : MutableList 集合 还有一些 运算符重载 , 添加元素运算符 += 和 删除元素运算符 -= ;
mutableList += "Jack"
mutableList -= "Tom"
//等价于
mutableList.add("Jack")
mutableList.remove("Tom")
- 通过 Lambda 表达式筛选要删除的元素
fun main() {
// 创建可变列表集合
val mutableList = mutableListOf("Tom", "Jerry")
// 通过 Lambda 表达式筛选要操作的元素
// 删除包含 字母 T 的元素
mutableList.removeIf {
it.contains("T")
}
println(mutableList)
}
3. list遍历
fun main() {
// 创建可变列表集合
val list = listOf("Tom", "Jerry", "Jack")
// 使用 for in 循环遍历
for (name in list) {
println("for : $name")
}
// 使用 forEach 遍历
list.forEach {
println("forEach : $it")
}
// 遍历时获取索引位置
list.forEachIndexed { index, s ->
println("$index : $s")
}
}
// 输出结果
for : Tom
for : Jerry
for : Jack
forEach : Tom
forEach : Jerry
forEach : Jack
0 : Tom
1 : Jerry
2 : Jack
4. List 通过解构一次性给多个元素赋值
fun main() {
// 创建可变列表集合
val list = listOf("Tom", "Jerry", "Jack")
// 使用 list 集合一次性给 2 个元素赋值, 第 1 个元素跳过
val (name1, _, name3) = list
println("name1 = $name1")
println("name3 = $name3")
}
//
name1 = Tom
name3 = Jack
5. Set集合
https://blog.csdn.net/shulianghan/article/details/128717667
二. 关键字
1. reified
reified关键字介绍
在Kotlin中,reified是一个特殊的关键字,用于修饰内联函数中的类型参数。这使得在函数内部可以访问类型参数的具体类型。通常情况下,由于类型擦除(type erasure),在运行时是无法直接获取泛型类型参数的具体类型的
2. noline / inline / crossline
- 局部返回
- inline 减少开销,避免重复创建fun
- noline 取消内联,一些场景下,需要把参数传给非内联函数
viewmodel源码
public inline fun <reified VM : ViewModel> ComponentActivity.viewModels(
noinline extrasProducer: (() -> CreationExtras)? = null,
noinline factoryProducer: (() -> ViewModelProvider.Factory)? = null
): Lazy<VM> {
val factoryPromise = factoryProducer ?: defaultViewModelProviderFactory
return ViewModelLazy(
VM::class,
{ viewModelStore },
factoryPromise,
{ extrasProducer?.invoke() ?: this.defaultViewModelCreationExtras }
)
}
// TODO 250131