package kotlinall.chapter5import java.io.BufferedReader
import java.io.FileReader
import java.lang.StringBuilder//高阶函数 传入的参数是函数 或者返回是函数
class Hello{fun world(){println("Hello World")}
}
fun test(){}
class PdfPrinter{fun println(any:Any){kotlin.io.println(any)}
}
//高阶函数基础
fun baseFun(vararg args:String){//1.引用类里面的函数val hellowrold = Hello::world//拿到函数的引用args.filter(String::isNotEmpty)//接收的函数类型 T类型的参数 返回boolean值的函数 isNotEmtpy有一个隐形的参数就是String实例本身//2.引用包级函数 直接::函数名称val print1 = ::test//3.引用调用者的函数val pdfPrinter:PdfPrinter = PdfPrinter()args.forEach(pdfPrinter::println)//args.forEach(::println)
}//常见高阶函数
fun commonFun(){val list = listOf<Int>(1,2,3,4,5)val newList = ArrayList<Int>()list.forEach{val newElement = 2*it + 3newList.add(newElement)}newList.forEach(::println)val newList1 = list.map { it*2+3 }//map 对每一个值进行处理添加一个新的list里面返回val newList2 = list.map { it.toDouble() }val newList3 = list.map(Int::toDouble)//采用函数引用的方式去传递 因为使用类的实例调用 所以有一个默认实例的参数val list4 = listOf(1..20,2..5,100..322)val flatList1 = list4.flatMap{//把集合的集合打平 可以对集合里的元素继续进行mapit}val flatList = list4.flatMap{//把集合的集合打平 可以对集合里的元素继续进行mapit.map {"NO.$it"}}flatList.forEach(::println)//flatList1.reduce { acc, i -> acc+i }//acc 当前运算结果 和当前元素的值(0..6).map(::factorial) //打印0,6的 阶乘的值//给reduce acc 添加初始值flatList1.fold(5){acc,i->acc+i}//redule acc 必须是 flatList迭代元素类型的父类//fold acc可以传入任意类型flatList1.fold(StringBuilder()){acc,i->acc.append(i).append(",")}println((0..6).joinToString(","))//拼接字符串flatList1.foldRight(StringBuilder()){i,acc->acc.append(i).append(",")}//倒叙拼接(0..6).map(::factorial).filter {it %2 ==1} //打印0,6的 阶乘的值 过滤出基数的值(0..6).map(::factorial).filterIndexed { index, i ->index%2==1  }//奇数位的结果(0..6).map(::factorial).takeWhile {  it%2==0}//取到第一个不是偶数则终止条件 (取到一个不满足条件的 终止循环)}fun factorial(n:Int):Int{if(n == 0) return 1return (1..n).reduce { acc, i ->acc*i  }
}class Person(val name:String,val age:Int){fun work(){println("$name is wroking")}
}
fun findPerson():Person?{return null
}
fun commonFun1(){val person = findPerson()println(person?.name)//不为空则打印name 空显示空字符串findPerson()?.let { //不为空则调用letprintln(it.name)println(it.age)}findPerson()?.apply { //apply 相当于处于person类中 可以直接调用方法 和字段work()println(age)}val br = BufferedReader(FileReader("hello.txt"))with(br){//with 接收一个参数 作为apply使用var line:String?while (true){line = readLine()?:breakprintln(line)}close()}val br1 = BufferedReader(FileReader("hello.txt")).readText()BufferedReader(FileReader("hello.txt")).use {//对于需要close的 使用的模板方法 可以使用use去处理var line:String?while (true){line = it.readLine()?:breakprintln(line)}}}fun main(args: Array<String>) {}

kotlin 常用高阶函数相关推荐

  1. Kotlin常用高阶函数

    高阶函数 高阶函数可以把函数作为参数传递或者返回值返回的函数.既然函数对象作为数值进行传递那么就会有如何引用函数的问题.函数引用的三种方式: 直接双冒号的方式,引用的是包级别的函数: // 这种引用适 ...

  2. Kotlin的高阶函数和常用高阶函数

    Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...

  3. python list大小_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  4. Kotlin使用高阶函数实现多方法回调

    最近项目中开始使用kotlin,遇到的一个问题就是从多方法回调的问题 常规的java回调如下: public interface OnCallBack<T> {void onSuccess ...

  5. 【Kotlin】Kotlin的高阶函数与Lambda表达式

    前言 Kotlin的高阶函数与Lambda表达式是Kotlin的两大特色,使用频率非常高.熟悉它的用法与本质对于简化代码.提升开发效率非常有帮助. 这两个概念不是同一个东西,但是又有非常紧密的关联.这 ...

  6. python四种常用高阶函数

    1.什么是高阶函数 把函数作为参数传入,这样的函数称为高阶函数 例如·: def func1(x,y,f):return f(x) + f(y) num = func1(-10, 2, abs) pr ...

  7. Swift 常用高阶函数

    Swift 常用高阶函数 map函数 对每一个元素进行运算 计算每一个元素的count 对元素进行大小写变换 转换类型 sorted函数 从小到大排序 从大到小排序 flatMap函数 降维 过滤元素 ...

  8. javascript数组常用高阶函数

    一·数组常用高阶函数 Array.prototype.filter() 此方法接收一个回调函数作为参数,回调参数接受三个参数,item(源数组中的每一个元素).index(数组下标).arr(源数组) ...

  9. Kotlin 使用高阶函数实现回调

    lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.s ...

最新文章

  1. Java 散点图 数据库 代码_java – 来自数据库的jfreechart中的散点图
  2. idea base64encoder没有jar包_老师,免费版的IDEA为啥不能使用Tomcat?
  3. java8 两个list取差集_java8 多个list对象用lambda求差集操作
  4. 清水河畔论坛二手帖子爬虫
  5. FileDemo4~5 获取一个目录中的所有子项/部分子项
  6. war包还原成项目_将War包还原成java web项目
  7. 百度顶会论文复现营论文心得
  8. 哈希原理与常见哈希函数
  9. 2021财院ACM选拔赛题解
  10. ios学习笔记之三- iPhone模拟器基本操作
  11. Vj程序设计复杂模拟题训练
  12. RP50 RP55 吉他效果器音色推荐
  13. Java中的Swing概述
  14. Electron Fiddle 通过代理加速下载(Mac)
  15. 第一次CSP认证110分
  16. android TV端如何读取微信网页版二维码显示生成一张图片
  17. dhcp服务器显示不启用,如何启用dhcp服务器
  18. 顺丰--Java丰桥接口整体封装(下单、查询、打印)
  19. fix indent命令实现纳米摩擦及摩擦力计算案例
  20. 《土地公婆》钟久夫邓天晴演绎梁祝爱情

热门文章

  1. consul健康检测
  2. User: root is not allowed to impersonate anonymous (state=08S01,code=0)
  3. 树莓派直接连接笔记本电脑方法
  4. Guess Number(Java版)
  5. [Intensive Reading]图像生成:GAN
  6. 什么是CAP?适用的场景有哪些?
  7. vue耦合程度是什么意思
  8. Java之Lists.Partition项目中的使用
  9. windows10下cuda9.2升级到cuda10.2
  10. 神经网络算法详解 04:反馈神经网络(Hopfield、BAM、BM、RBM)