高階函數(shù)
高階函數(shù)可以將函數(shù)作為參數(shù)或者是返回值
- forEach
提供遍歷集合的功能,forEach其實是IntArray類的擴展方法,它接受一個(Int)-> Unit的lambda表達式并且使用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進行一些數(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 { //當元素等于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接口的對象的擴展方法,也就是大部分的IO操作相關(guān)類會有這個擴展高階方法
在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() }
本文僅作為個人學習記錄
參考文章:簡Kotlin 之旅5