高階函數(shù)
1.map
//1.map:將List中每個(gè)元素轉(zhuǎn)換成新的元素,并添加到一個(gè)新的List中,最后將新List返回
arrayOf(1, 2, 3).map { i: Int -> i * 10 }.forEach(::println)
/**
* 打印輸出
* 10
* 20
* 30
*/
2.flatMap
//2.flatMap:將數(shù)組中全部元素按順序組成一個(gè)list
//注意:lambda表達(dá)式中的參數(shù)類型可以不寫.如:List<String>和IntRange
listOf(listOf("a", "b"), listOf("c", "d")).flatMap { i: List<String> -> i.asIterable() }.forEach(::println)
println("----------")
arrayOf(1..3, 1..5).flatMap { i: IntRange -> i.asIterable() }.forEach(::println)
/**
* 打印輸出
* a
* b
* c
* d
* ----------
* 1
* 2
* 3
* 1
* 2
* 3
* 4
* 5
*/
3.fold
/**
* 3.fold:將集合中的元素依次冒泡組合,最終得到一個(gè)結(jié)果
* 第一次執(zhí)行時(shí),由初始值10作為參數(shù)a,由集合中第0個(gè)元素作為參數(shù)b
* 第二次執(zhí)行時(shí),第一次執(zhí)行的返回值作為參數(shù)a,由集合中第1個(gè)元素作為參數(shù)b
* 依次類推...
* 最終將結(jié)果返回
*/
val foldResult1 = arrayOf(1, 2, 3).fold(10, { a, b -> a + b })//計(jì)算過程為10+1+2+3,等于16
val foldResult2 = arrayOf(1, 2, 3).fold(10, { a, b -> a * b })//計(jì)算過程為10*1*2*3,等于60
println(foldResult1)
println(foldResult2)
/**
* 打印輸出
* 16
* 60
*/
4.reduce
/**
* 4.reduce:與fold類似,區(qū)別是reduce沒有初始值
*/
val reduceResult1 = arrayOf(1, 2, 3, 4).reduce { acc, i -> acc + i }//計(jì)算過程為1+2+3+4,等于10
val reduceResult2 = arrayOf(1, 2, 3, 4).reduce { acc, i -> acc * i }//計(jì)算過程為1*2*3*4,等于24
val reduceResult3 = arrayOf("a", "b", "c", "d").reduce { acc, i -> "$acc,$i" }
println(reduceResult1)
println(reduceResult2)
println(reduceResult3)
/**
* 打印輸出
* 10
* 24
* a,b,c,d
*/
5.joinToString
/**
* 5.joinToString:為集合元素添加分隔符,組成一個(gè)新的字符串并返回
*/
val joinToStringResult1 = arrayOf("a", "b", "c", "d").joinToString { i -> i }
val joinToStringResult2 = arrayOf("a", "b", "c", "d").joinToString(separator = "#", prefix = "[前綴]", postfix = "[后綴]", limit = 3, truncated = "[省略號]") { i -> i }
println(joinToStringResult1)
println(joinToStringResult2)
/**
* 打印輸出
* a, b, c, d
* [前綴]a#b#c#[省略號][后綴]
*/
6.filter
/**
* 6.filter:將中的元素遍歷,把符合要求的元素添加到新的list中,并將新list返回
*/
//根據(jù)元素值來過濾
arrayOf(1, 2, 3, 0, 4).filter { i -> i >= 2 }.forEach(::println)
println("----------")
//根據(jù)索引來過濾
arrayOf(1, 2, 3, 0, 4).filterIndexed { index, i -> index >= 2 }.forEach(::println)
/**
* 打印輸出
* 2
* 3
* 4
* ----------
* 3
* 0
* 4
*/
7.takeWhile
/**
* 7.takeWhile:遍歷list中的元素,將符合要求的元素添加到新集合中
* 注意:一旦遇到不符合要求的,直接終止
*/
//注意:返回的集合中只有4和3,沒有5,因?yàn)橛龅?時(shí),不符合要求,程序直接終止
arrayOf(4, 3, 2, 5).takeWhile { i -> i > 2 }.forEach(::println)
/**
* 打印輸出
* 4
* 3
*/