高階函數(shù)
高階函數(shù)可以將函數(shù)作為參數(shù)或者是返回值
- forEach
提供遍歷集合的功能,forEach其實是IntArray類的擴(kuò)展方法,它接受一個(Int)-> Unit的lambda表達(dá)式并且使用for循環(huán)對集合中的每個對象都做action操作。 - map
通常用于集合的映射val oldList = listOf(1, 2, 3, 4, 5) val newList = ArrayList<Int>() //遍歷并處理數(shù)據(jù)源的每一條數(shù)據(jù) val newList1 = oldList.map { it * 2 + 3 } //還可用于集合的轉(zhuǎn)換 val newList2 = oldList.map(Int::toDouble)
- flatMap
通常用于扁平化集合榛鼎,是一種支持二維集合映射的高階函數(shù)val list = listOf( 1..20, 2..5, 3..4 ) val newList3 = list.flatMap { it } //結(jié)合map進(jìn)行一些數(shù)據(jù)的變換 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
用于過濾數(shù)據(jù)集合val newList5 = oldList.filter { //過濾條件 it == 2 || it == 4 }
- takeWhile
用于帶有條件的循環(huán)遍歷val res = oldList.takeWhile { //當(dāng)元素等于2的時候結(jié)束循環(huán) it != 2 }
- let,apply,with
簡化代碼淮逻,直接可以在lambda函數(shù)中使用對象的屬性和方法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是針對那些實現(xiàn)了Closable接口的對象的擴(kuò)展方法,也就是大部分的IO操作相關(guān)類會有這個擴(kuò)展高階方法
在try中調(diào)用block針對Closable對象的操作阁簸,如果發(fā)生了異常會記錄并拋出異常爬早,finlly中不管有沒有出異常都會自動做關(guān)閉操作,避免了IO處理的try..catch..finally樣板代碼启妹。val file = File("test.txt") val bufferReader = BufferedReader(FileReader(file)) bufferReader.use { it.readLine() }
本文僅作為個人學(xué)習(xí)記錄
參考文章:簡Kotlin 之旅5