关于kotlin的高级函数整合(有遇到的就记录,持续更新)

关于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
                }
        }
    }
}

总结

这些语法函数都非常的方便简洁,使用上手非常简单仅供参考,如有不对欢迎提出~!
目前所用到的函数相关知识都在这上面,如果还有会继续增加,也欢迎补充,一起学习谢谢~~!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值