Kotlin基础 9
来源:互联网 发布:谷歌学术 知乎 编辑:程序博客网 时间:2024/04/29 23:55
高阶函数的基本概念
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:println val 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 1 return (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 1 return (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 1 return (1..n).reduce { acc, i -> acc * i }}
不得不提的 字符串连接
//字符串连接函数:0,1,2,3,4,5,6 print((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()?:break println(line) } close() }}
use关键字
BufferedReader(FileReader("hello.txt")).use { var line:String? while (true){ line = it.readLine()?:break println(line) } }
user 内部的释放
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R { var closed = false try { return block(this) } catch (e: Exception) { closed = true try { this?.close() } catch (closeException: Exception) { } throw e } finally { if (!closed) { this?.close() } }}
阅读全文
1 0
- Kotlin基础 9
- Kotlin基础
- kotlin基础
- kotlin基础
- Kotlin基础
- kotlin基础
- kotlin基础
- kotlin基础
- Kotlin 基础
- Kotlin基础
- kotlin基础
- Kotlin-基础
- Kotlin基础
- Kotlin基础
- Kotlin基础语法
- Kotlin 基础语法学习
- Kotlin基础语法
- kotlin基础语言知识
- 3分钟理解bootloader的流程
- 基于网管的企业IT管理解决方案
- mysql 1055错误解决
- 查看80端口占用以及开机禁止IIS自启动
- 线程的生命周期
- Kotlin基础 9
- python group()
- WebLogic使用总结(五)——Web项目使用Sigar在WebLogic服务器部署遇到的问题
- java之用volatile和不用volatile的区别
- 数一数1到n出现1的数目
- 内存泄漏和内存溢出
- AndroidStudio使用Butterknife
- How to install the GeoIP Geo location PECL extension?
- WebLogic使用总结(六)——WebLogic创建虚拟主机和修改启动端口号