高阶函数
高阶函数可以将函数作为参数或者是返回值
- forEach
提供遍历集合的功能,forEach其实是IntArray类的扩展方法,它接受一个(Int)-> Unit的lambda表达式并且使用for循环对集合中的每个对象都做action操作。 - map
通常用于集合的映射val oldList = listOf(1, 2, 3, 4, 5) val newList = ArrayList<Int>() //遍历并处理数据源的每一条数据 val newList1 = oldList.map { it * 2 + 3 } //还可用于集合的转换 val newList2 = oldList.map(Int::toDouble)
- flatMap
通常用于扁平化集合,是一种支持二维集合映射的高阶函数val list = listOf( 1..20, 2..5, 3..4 ) val newList3 = list.flatMap { it } //结合map进行一些数据的变换 val newList4 = list.flatMap { it.map { "NO.$it" } }
- reduce
通常用于求和var sum = oldList.reduce { acc, i -> acc + i }
- fold
用于求和并加上一个初始值sum = (1..5).fold(5) { acc, i -> acc + i }
- filter
用于过滤数据集合val newList5 = oldList.filter { //过滤条件 it == 2 || it == 4 }
- takeWhile
用于带有条件的循环遍历val res = oldList.takeWhile { //当元素等于2的时候结束循环 it != 2 }
- let,apply,with
简化代码,直接可以在lambda函数中使用对象的属性和方法p?.let { println(it.name) println(it.age) it.work() } //--------------- p?.apply { println(name) println(age) work() } //------------------- with(BufferedReader(FileReader("test.txt"))) { var line: String? while (true) { line = readLine() ?: break println(line) } close() }
- use
use是针对那些实现了Closable接口的对象的扩展方法,也就是大部分的IO操作相关类会有这个扩展高阶方法
在try中调用block针对Closable对象的操作,如果发生了异常会记录并抛出异常,finlly中不管有没有出异常都会自动做关闭操作,避免了IO处理的try..catch..finally样板代码。val file = File("test.txt") val bufferReader = BufferedReader(FileReader(file)) bufferReader.use { it.readLine() }
本文仅作为个人学习记录
参考文章:简Kotlin 之旅5
网友评论