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.Unitvar hi2 = ComposeCall::sayHivar 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()//复制一份新的arrnewArr.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<Int>()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 80i rat 1i cat "jack"
//        TestInfix, dog 3 and 80
//        TestInfix rat 3 and 1
//        TestInfix, dog 3 and jack
复制代码

非空判断:

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

kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函数解释和使用相关推荐

  1. Python基础(六)—函数式编程(内部函数、闭包、lambda、filter/map/reduce/sorce、偏函数)

    内部函数 Python中函数的作用域由def关键字界定,函数内的代码访问变量的方式是从其所在层级由内向外,若往外直至全局作用域都查找不到的话代码会抛异常. 主要看以下代码的差别~~ "&qu ...

  2. python3函数中lambda/filter/map/reduce的用法

    lambda/filter/map/reduce这几个函数面试中很肯定会用到,本篇主要介绍这几个函数的用法. 1.lambda 匿名函数,用法如下: # lambada 参数,参数,参数 : 返回的表 ...

  3. Python内建函数之——filter,map,reduce

    原文链接:http://blog.csdn.net/prince2270/article/details/4681299 在讲述filter,map和reduce之前,首先介绍一下匿名函数lambda ...

  4. Python学习之Part09.高阶函数filter(),map(),reduce(),sorted()

    1.高阶函数 一个函数作为参数传给另外一个函数: 一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归) # abs()用来求一个数的绝对值 # 将abs函数赋值,则f==abs f = a ...

  5. filter,map,reduce

    · filter()函数 filter()函数包括两个参数,分别是function和list.该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示: ...

  6. ES5 数组扩展方法 forEach/filter/map的使用与重写

    ES3 splice slice join sort (IE5.IE6) 数组扩展方法 ES5(在ES3的基础上增加.修正) forEach 可能会改变原数组(直接操作了arr[i],没有使用深拷贝) ...

  7. Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

  8. Python高级特性: 函数编程 lambda, filter,map,reduce

    一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...

  9. filter,map,reduce,apply函数

    (1)lambda     lambda是Python中一个很有用的语法,它允许你快速定义单行最小函数.类似于C语言中的宏,可以用在任何需要函数的地方. 基本语法如下: 函数名 = lambda ar ...

最新文章

  1. DRV8834用于驱动双电机
  2. 探秘区块链 - 头条新闻
  3. luogu P2679——子串
  4. 使用深度学习解决拍照文档复杂背景二值化问题
  5. BlockChain:BlockChain周边概念详解+个人理解
  6. Python3 strip()去除字符串首尾指定信息
  7. Linux中的15个‘echo’ 命令实例
  8. javascript中的命名规则和方法
  9. fi sap 凭证冲销 稅_SAP 成本收集器与重复制造配置手册
  10. 2D Game Creation - 2D游戏开发基本流程
  11. tecplot批量导出图片_科研画图工具Tecplot使用教程
  12. 助教日志—请沈航13级同学将GIT地址和CNBLOG地址发到这篇博文的评论中
  13. 空间解析几何基础总结
  14. 微信小程序-将时间转换成几秒前 几分钟前 几小时前 几天前等时间格式
  15. Windows下设备ID的查询
  16. excel怎么设置打印区域_Excel可以自动调整打印区域,这个技术学会就厉害了!...
  17. 【行为分析】(一)宏观简介
  18. 超简单的C++去重、排序
  19. 颌面骨折方向文献整理(21篇)
  20. ISIS(中间系统到中间系统)及其配置

热门文章

  1. java 多目录 编译jar_javac编译多个包下的、依赖其他jar包的java文件
  2. IDEA Tomcat Catalina Log出现乱码
  3. 日期时间格式之间的相互转换
  4. ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...
  5. flux react php,Vue的Flux框架之Vuex状态管理器
  6. python微博评论爬虫_详解用python写网络爬虫-爬取新浪微博评论 基于Python的新浪微博爬虫研究...
  7. vb连接mysql未发现_vb连接MySQL遇到的问题解决方法
  8. MYSQL增量备份和全量备份脚本分享
  9. 机器学习基础-吴恩达-coursera-(第一周学习笔记)----Introduction and Linear Regression
  10. codeforces 791A-C语言解题报告