高阶函数的基本概念
1.传入或者返回函数的函数
2.函数引用 ::println
3.带有Receiver的引用 pdfPrinter:println

fun main(args: Array<String>) {val list: Array<String> = arrayOf("h", "e", "l","")//方式一list.forEach(::println)//方式二val filter = list.filter(String::isNotEmpty)filter.forEach(::println)//带有Receiver的引用 pdfPrinter:printlnval pdfPrinter = PDFPrinter()list.forEach(pdfPrinter::println)}class PDFPrinter{fun println(param:String){kotlin.io.println("PDF -> $param")}
}

常用高阶函数

forEach

    val list = listOf(1,2,3,4,5,8,10)list.forEach(::println)

map

    val newList = list.map {it * 2 + 3   //每个item x 2   3}//结果:[5, 7, 9, 11, 13, 19, 23]println(newList)

flatMap

    val list = listOf(1..20,2..5,100..105)val flatMap: List<String> = list.flatMap { itemRand ->itemRand.map { itemElement ->"No.$itemElement"}}flatMap.forEach(::println)

reduce

    val list = listOf(1..20,2..5,100..105)val flatList = list.flatMap{ it }println(flatList.reduce { acc, i -> acc + i })  //得到总值

阶乘运算

fun main(args: Array<String>) {//所有阶乘 的总和 val value = (0..6).map(::fatorial).reduce { acc, i -> acc + i }println(value)
}//阶乘计算
fun fatorial(n:Int):Int{if (n == 0) return 1return (1..n).reduce { acc, i -> acc * i }
}

fold

fun main(args: Array<String>) {val  value = (0..6).map(::fatorial).fold(5){acc, i -> acc + i}println(value)
}//阶乘计算
fun fatorial(n:Int):Int{if (n == 0) return 1return (1..n).reduce { acc, i -> acc * i }
}
fun main(args: Array<String>) {val  value = (0..6).map(::fatorial).fold(StringBuilder()){acc, i -> acc.append(i).append(",")}//输出结果:1,1,2,6,24,120,720,println(value)
}//阶乘计算
fun fatorial(n:Int):Int{if (n == 0) return 1return (1..n).reduce { acc, i -> acc * i }
}

不得不提的 字符串连接

    //字符串连接函数:0,1,2,3,4,5,6print((0..6).joinToString(","))

filter 过滤

fun main(args: Array<String>) {//拿到所有的偶数println((1..100).filter { it % 2 == 0 })
}

通过index过滤

fun main(args: Array<String>) {println((1..100).filterIndexed { index, i -> index == 0 })
}

takeWhile

当条件不满足时,循环

    //输出结果 : [0, 1, 2]println((0..100).takeWhile { it != 3 })

let关键字

data class Person(val name:String,val age:Int)fun findPerson():Person?{return Person("张三",20)
}fun main(args: Array<String>) {findPerson()?.let { (name,age) ->//轮流输出println(name)println(age)}
}

apply关键字

data class Person(val name:String,val age:Int){fun work(){println("$name is working!!!")}
}fun findPerson():Person?{return Person("张三",20)
}fun main(args: Array<String>) {findPerson()?.apply {work()println(name)}
}

run 关键字

run函数和apply函数很像,只不过run函数是使用最后一行的返回,apply返回当前自己的对象。

fun testRun() {// fun <T, R> T.run(f: T.() -> R): R = f()"testRun".run {println("this = " + this)}.let { println(it) }
}
// 运行结果
// this = testRun
// kotlin.Unit

with 关键字

fun main(args: Array<String>) {val br = BufferedReader(FileReader("hello.txt"))with(br){while (true){val line:String = readLine()?:breakprintln(line)}close()}
}

use关键字

    BufferedReader(FileReader("hello.txt")).use {var line:String?while (true){line = it.readLine()?:breakprintln(line)}}

user 内部的释放

public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {var closed = falsetry {return block(this)} catch (e: Exception) {closed = truetry {this?.close()} catch (closeException: Exception) {}throw e} finally {if (!closed) {this?.close()}}
}

Kotlin基础 9 - 高阶函数相关推荐

  1. Kotlin中的高阶函数

    博客地址sguotao.top/Kotlin-2018- 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g ...

  2. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  3. Python基础-09 高阶函数

    高阶函数 一个函数作为另一个的返回值 def demo():print('我是test函数')return 'hello'def demo():print('我是demo函数')return test ...

  4. Kotlin 集合类的高阶函数

    集合类:用于存放对象的引用,而非对象本身. 数据结构主要解决三个问题: 数据元素之间的逻辑关系:集合.线性结构.树形结构.图形结构等. 数据的物理结构:顺序.链表.索引.散列表.等形式. 数据的处理运 ...

  5. Kotlin 编程核心基石—高阶函数

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

  6. Kotlin——高阶函数详解与标准的高阶函数使用

    一.高阶函数介绍 在介绍高阶函数之前,或许您先应该了解Kotlin中,基础函数的使用与定义.您可以参见Kotlin--初级篇(七):函数(方法)基础使用这边文章的用法. 在Kotlin中,高阶函数即指 ...

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

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

  8. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  9. Android开发基础——Kotlin:高阶函数

    高阶函数 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数. 同时Kotlin中还增加了函数类型的概念,因此如果将函数类型添加到一个函数的参数声明或返回值声明 ...

最新文章

  1. CSS基础:text-overflow:ellipsis溢出文本的显示样式
  2. 循环灯c语言,单片机c语言循环灯
  3. redis streams_初步了解Redis Streams以及如何在Java中使用它们
  4. 企业管理软件随想-透视-包容,无形思想-有形方便
  5. 编辑器未包含main类型_利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中...
  6. fmea软件_新版FMEA易错点梳理(一):范围界定和过程流程图-SGS
  7. 云计算学习笔记:什么是云?云计算是什么?
  8. C语言软盘,如何使用编程的方法--创建1.44兆软盘镜像的几种方法。。。(之一 C语言法)...
  9. Java中文乱码详解
  10. 天涯明月刀手游为什么服务器维护,天涯明月刀手游12.7日更新公告 更新内容详情一览...
  11. python如何表示正整数_python中正整数
  12. 微处理器 微型计算机系统,(计算机)什么是“微处理器、微型计算机、微型计算机系统,以及它们区别和联系?...
  13. linux解压rar.gz,Linux tar.gz 、zip、rar 解压 压缩命令
  14. 程序员求职之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
  15. 原生Js放大镜实例(附图附讲解可直接复制研究使用,小白福利)
  16. 微博登录账号密码终于又找回来了。Mark一下
  17. 30岁的我应该何去何从
  18. UE4 通过按键升降电梯
  19. comp9334-proj2
  20. MVC---Android App的设计架构:MVC,MVP,MVVM与架构经验谈

热门文章

  1. IntelliJ IDEA MyEclipse EditPlus注册码破解
  2. grep精确匹配与完全匹配
  3. layui写弹出框显示表单信息_layui 弹出框提交表单
  4. 无招胜有招-Vivado非工程模式下的FPGA设计流程
  5. java获取视频时长(实测可行)
  6. 【AI】第四次作业:猫狗大战挑战赛
  7. 三招破解禁用鼠标右键的网站
  8. 基于ANSYS Workbench的表面裂纹计算
  9. 简单java问题 官方说法 java基础 初级第一章
  10. CSS弹性布局(排列方式、项目换行、主轴对齐方式)