博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函数解释和使用
阅读量:6717 次
发布时间:2019-06-25

本文共 4052 字,大约阅读时间需要 13 分钟。

kotlin之::函数调用、plus(增加元素)、copyOf(复制数组)、reverse(翻转数组)、forEach(遍历数组)、filter(过滤数组)、map函数操作及扩展、reduce函数、fold函数、filter、filterIndexed、takeWhile、infix关键字等的解释和使用示例。

说明已经在代码里面了,请看代码。如果有任何疑问或者建议,可以留言。谢谢。

函数的其它用法::,操作函数的其它方式。

class ComposeCall {    fun sayHi() {        System.out.println("ComposeCall,sayHi:Hi!")    }    fun sayHiToAny(any: Any) {        System.out.println("--->ComposeCall,sayHiToAny:Hi," + any)    }}复制代码

验证

var hi1 = ComposeCall::sayHiToAny//返回的是方法本身,而不是返回值    println("hil:" + hi1)    //输出//    hil:fun com.tanksu.ndkdemo3.feature.cls.ComposeCall.sayHiToAny(kotlin.Any): kotlin.Unit    var hi2 = ComposeCall::sayHi    var com = ComposeCall()    hi2(com)//必须要传入类的实例才能够进行调用,相当于java的invoke一样    hi1(com, "jack")//传入类实例和参数,相当于java的invoke方法,去调用hi2,以及入参    //输出//        ComposeCall,sayHi:Hi!//        --->ComposeCall,sayHiToAny:Hi,jack复制代码

数组操作之plus(增加元素)、copyOf(复制数组)、reverse(翻转数组)、forEach(遍历数组)、filter(过滤数组)等方法对数组的操作。

val arr = arrayOf("Apple", "Banana", "", "Orange")        arr.forEach(::println)//空对象也输出了        println("--------------------------")        var narr = arr.plus("juice")//这里必须用另外一个对象来接收,原来的对象不会改变        var newArr = narr.copyOf()//复制一份新的arr        newArr.forEach(::println)        println("--------------------------")        arr.reverse()//将数组翻转过来        arr.forEach(::println)        println("--------------------------")        println(arr.filter(String::isNotEmpty))//filter将会过滤不为空的对象//        Apple//        Banana////        Orange//        --------------------------//        Apple//        Banana////        Orange//        juice//        --------------------------//        Orange////        Banana//        Apple//        --------------------------//        [Orange, Banana, Apple]复制代码

list的map函数操作及扩展,对数组进行自定义操作。

val raw = listOf(1, 2, 3, 4, 5, 5)    val newList = ArrayList
() raw.forEach { newList.add(it + 1)//it替代raw中每一个元素,这里一次加入到newList中 } println(newList) println(raw.map { it * 10 })//map先遍历raw的元素,然后再执行打印动作 println(raw.map(Int::toDouble))//map先将每个元素都变成double类型,然后再执行打印动作// [2, 3, 4, 5, 6, 6]// [10, 20, 30, 40, 50, 50]// [1.0, 2.0, 3.0, 4.0, 5.0, 5.0]复制代码

数组的reduce函数:遍历数组元素,并自定义操作。和fold类似。

val list = listOf(2, 3, 5)        println(list.reduce { ret, i -> ret + i })//第一个参数ret是结果,第二个参数是代表要执行的操作,        // 比如我这里是数组每个元素相乘,最后吧结果输出给ret。。。。下面我将进行加法操作,如下        //输出:30        //加法操作        println(list.reduce { ret, i -> ret + i })        //输出:10复制代码

数组的fold函数用法:对数组进行进行自定义操作。和reduce类似。

val list = listOf(2, 3, 5)    println("--------------------------")    println(raw.fold(10) { ret, i -> ret + i })//这里给了一个初始值10,然后fold操作和reduce操作类似    println(raw.fold(StringBuilder("jack say:")) { ret, i -> ret.append(i) })//这里也给了一个初始值StringBuilder    // ,在第二个参数里面才能够进行append操作    //输出结果//        --------------------------//        20//        jack say:235复制代码

数组方法之filter、filterIndexed、takeWhile等对数组元素操作。

val list = listOf(4, 3, 2, 5, 6, 8, 9)        println(list.filter { it == 3 || it == 6 })//过滤等于3或者等于6的元素集合,结果以新的集合返回        println(list.filterIndexed { index, i -> index == i })//过滤等于第一个参数的元素集合,结果以新的集合返回        println(list.takeWhile { it in 0..5 })//过滤在0-5之间的元素,结果以新的集合返回        println(list.takeWhile { it in 3..5 })//过滤在3-5之间的元素,结果以新的集合返回。这里加入判断到其中一个元素不满足条件,就会终止执行下面的元素判断        //输出结果//        [3, 6]//        [2]//        [4, 3, 2, 5]//        [4, 3]复制代码

infix的关键字解释:函数的另外一种调用手法。(骚操作)

class TestInfix(var age: Int) {            infix fun dog(weight: Int) {                println("TestInfix, dog $age and $weight")            }            infix fun cat(weight: String) {                println("TestInfix, dog $age and $weight")            }        }        infix fun TestInfix.rat(mounth: Int) {//这是            println("TestInfix rat $age and $mounth")        }        var i = TestInfix(3)        i dog 80        i rat 1        i cat "jack"//        TestInfix, dog 3 and 80//        TestInfix rat 3 and 1//        TestInfix, dog 3 and jack复制代码

非空判断:

用 ? 调用是安全调用,在被调用的量为空时也返回null用 !! 调用的是假定非空调用,在被调用的量为空时会发起空指针异常(NPE)或者直接用条件判断(if-else)来事先决定好空量的处理方案复制代码

转载地址:http://fiumo.baihongyu.com/

你可能感兴趣的文章
IT图书创作中要注意的多与少
查看>>
Hyper-V 3.0功能部署PART 2:防火墙和证书
查看>>
SQL2K数据库开发二十三之索引操作重建索引
查看>>
用IE删除软件删除IE出现问题解决方法
查看>>
从“窃听门”事件解读手机Rootkit攻击
查看>>
[Android学习笔记三] Support v7提供交错式网格布局开发示例
查看>>
QoS令牌桶工作原理
查看>>
重提URL Rewrite(4):不同级别URL Rewrite的一些细节与特点
查看>>
linux子系统的初始化_subsys_initcall()【转】
查看>>
x60系统安装步骤
查看>>
Linux内核同步机制之(三):memory barrier【转】
查看>>
安装Fedora 24后必要的设置
查看>>
ES JVM使用如果超过75%就会GC较多,导致ES索引性能下降
查看>>
elasticsearch源码分析之search模块(server端)
查看>>
【转】如何用 Chrome for Android 做远程遥控 debugging
查看>>
Rails中Form标签JavaScript验证
查看>>
ArcObject开发,程序编译通过,但无法启动的解决
查看>>
Oracle 存储过程的创建,及触发器调用存储过程
查看>>
关于Socket通信服务的心跳包(转)
查看>>
.net面试问答(大汇总)
查看>>