Kotlin基础 9 - 高阶函数
高阶函数的基本概念
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 - 高阶函数相关推荐
- Kotlin中的高阶函数
博客地址sguotao.top/Kotlin-2018- 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g ...
- Scala编程基础——集合高阶函数
Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...
- Python基础-09 高阶函数
高阶函数 一个函数作为另一个的返回值 def demo():print('我是test函数')return 'hello'def demo():print('我是demo函数')return test ...
- Kotlin 集合类的高阶函数
集合类:用于存放对象的引用,而非对象本身. 数据结构主要解决三个问题: 数据元素之间的逻辑关系:集合.线性结构.树形结构.图形结构等. 数据的物理结构:顺序.链表.索引.散列表.等形式. 数据的处理运 ...
- Kotlin 编程核心基石—高阶函数
前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...
- Kotlin——高阶函数详解与标准的高阶函数使用
一.高阶函数介绍 在介绍高阶函数之前,或许您先应该了解Kotlin中,基础函数的使用与定义.您可以参见Kotlin--初级篇(七):函数(方法)基础使用这边文章的用法. 在Kotlin中,高阶函数即指 ...
- Kotlin 使用高阶函数实现回调
lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.s ...
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...
- Android开发基础——Kotlin:高阶函数
高阶函数 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数. 同时Kotlin中还增加了函数类型的概念,因此如果将函数类型添加到一个函数的参数声明或返回值声明 ...
最新文章
- CSS基础:text-overflow:ellipsis溢出文本的显示样式
- 循环灯c语言,单片机c语言循环灯
- redis streams_初步了解Redis Streams以及如何在Java中使用它们
- 企业管理软件随想-透视-包容,无形思想-有形方便
- 编辑器未包含main类型_利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中...
- fmea软件_新版FMEA易错点梳理(一):范围界定和过程流程图-SGS
- 云计算学习笔记:什么是云?云计算是什么?
- C语言软盘,如何使用编程的方法--创建1.44兆软盘镜像的几种方法。。。(之一 C语言法)...
- Java中文乱码详解
- 天涯明月刀手游为什么服务器维护,天涯明月刀手游12.7日更新公告 更新内容详情一览...
- python如何表示正整数_python中正整数
- 微处理器 微型计算机系统,(计算机)什么是“微处理器、微型计算机、微型计算机系统,以及它们区别和联系?...
- linux解压rar.gz,Linux tar.gz 、zip、rar 解压 压缩命令
- 程序员求职之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
- 原生Js放大镜实例(附图附讲解可直接复制研究使用,小白福利)
- 微博登录账号密码终于又找回来了。Mark一下
- 30岁的我应该何去何从
- UE4 通过按键升降电梯
- comp9334-proj2
- MVC---Android App的设计架构:MVC,MVP,MVVM与架构经验谈