关于kotlin的高级函数整合
文章目录
前言
这篇文章只是记录一些kotlin语言上面的高级函数整合,用法和原理都会写出来,如有不对告知修改
一、apply函数
apply函数扩展了所有的泛型对象,在闭包范围内可以任意调用该对象的任意方法,并在最后返回该对象。
作用:可以用来初始化对象的函数,返回类型是this不是it
textview.apply { this:TextView
title = "标题"
text = "文字"
hint = "这是textview"
}
二、let函数 && also函数
let函数使用it替代object对象去访问其公有的属性 & 方法,最后一行是可作为返回值返回出去
also函数使用it替代object对象去访问其公有的属性 & 方法,是把整个对象返回出去
虽然两个都挺像,但是返回结果不一样
val result = textview?.let { it:TextView
it.text = "文字"
it.hint = "这是textview"
"嘎嘎"
}
运行结果:
result = "嘎嘎"
val result = textview?.let { it:TextView
it.text = "文字"
it.hint = "这是textview"
"嘎嘎"
}
运行结果:
result = textview
三、with函数
with函数是将某对象作为函数的参数,在函数块内可以通过 this 指代该对象。
返回值为函数块的最后一行或指定return表达式
with(textview) {
text = "文字"
title = "标题"
hint = "这是textview"
}
四、run函数
run函数不同于with函数的是with方法把传入对象改成了,对象的run方法
textview.run { this:TextView
text = "文字"
title = "标题"
hint = "这是textview"
}
五、list中的map函数
map函数是最常用的一种函数式 API,它用于将集合中的每个元素都映射成另外的值.
映射规则在 Lambda 表达式中指定,最终形成新的集合。例如,我们希望让所有水果都变成大写模式
val fruitsList = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
val newList = list.map { it.toUpperCase() }
for(fruit in newlist){
println(fruit)
}
运行结果:
APPLE
BANANA
ORANGE
PEAR
GRAPE
WATERMELON
六、list中的filter函数
filter函数就跟名字意思一样过滤集合中的数据,可以单独使用也可以配合map函数使用
val fruitsList = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
val newList = list.filter{ it.length <= 5 }.map{it.toUpperCase()}
for(fruit in newlist){
println(fruit)
}
运行结果:
BANANA
ORANGE
WATERMELON
七、list中的any 和 all 函数
any 函数用于判断集合中是否至少存在一个元素满足指定条件,像 ||
all 函数用于判断集合中是否所有元素满足指定条件,像&&
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any { it.length <= 5 }
val allResult = list.all { it.length <= 5 }
println(anyResult + "," + allResult)
运行结果:
true,false
八、cursor中的use函数
use函数非常方便,不用while循环去遍历每一个指针所对应的数据并且不用调用close方法.
在源码里面已经帮你调用好了,你只用负责处理你的数据即可
it作为cursor对象调用
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
var exception: Throwable? = null
try {
return block(this)
} catch (e: Throwable) {
exception = e
throw e
} finally {
when {
apiVersionIsAtLeast(1, 1, 0) -> this.closeFinally(exception)
this == null -> {}
exception == null -> close()
else ->
try {
close() //这里
} catch (closeException: Throwable) {
// cause.addSuppressed(closeException) // ignored here
}
}
}
}
总结
这些语法函数都非常的方便简洁,使用上手非常简单仅供参考,如有不对欢迎提出~!
目前所用到的函数相关知识都在这上面,如果还有会继续增加,也欢迎补充,一起学习谢谢~~!