Kotlin中函数式编程API(2)✔️遍历操作
2019-06-13 本文已影响0人
狼性代码人
- forEach
- forEachIndexed
for
循环是一种比较传统的遍历方法。而函数式编程遍历数据应该使用 forEach
和 forEachIndexed
函数。
一、forEach
forEach
函数使用于Collection
、Map
集合以及数组,函数只有一个是函数类型的参数,这个实参往往使用尾随形式的 Lambda 表达式。在执行时 forEach
会把集合或数组中的每一个元素传递给 Lambda 表达式(或其他的函数引用)以便去执行。
fun main(args: Array<String>?) {
val array = arrayOf("老大", "老二", "老三", "老四")
val set = setOf(1, 2, 3)
val map = mapOf(1 to "老大", 2 to "老二", 3 to "老三", 4 to "老四")
println("-------- 遍历数组 ---------")
array.forEach { println(it) }
println("-------- 遍历Set集合 ---------")
set.forEach { println(it) }
println("-------- 遍历Map集合 k, v ---------")
map.forEach { key, value -> println("{$key, $value}") } // 1️⃣
println("-------- 遍历Map集合 Entry ---------")
map.forEach { println("{${it.key}, ${it.value}}") } // 2️⃣
}
// 输出结果
2019-06-13 11:33:12.654 I: -------- 遍历数组 ---------
2019-06-13 11:33:12.654 I: 老大
2019-06-13 11:33:12.654 I: 老二
2019-06-13 11:33:12.654 I: 老三
2019-06-13 11:33:12.654 I: 老四
2019-06-13 11:33:12.654 I: -------- 遍历Set集合 ---------
2019-06-13 11:33:12.655 I: 1
2019-06-13 11:33:12.655 I: 2
2019-06-13 11:33:12.655 I: 3
2019-06-13 11:33:12.655 I: -------- 遍历Map集合 k, v ---------
2019-06-13 11:33:12.655 I: {1, 老大}
2019-06-13 11:33:12.655 I: {2, 老二}
2019-06-13 11:33:12.655 I: {3, 老三}
2019-06-13 11:33:12.655 I: {4, 老四}
2019-06-13 11:33:12.655 I: -------- 遍历Map集合 Entry ---------
2019-06-13 11:33:12.656 I: {1, 老大}
2019-06-13 11:33:12.656 I: {2, 老二}
2019-06-13 11:33:12.656 I: {3, 老三}
2019-06-13 11:33:12.656 I: {4, 老四}
上述遍历 数组 和 Set 集合的 forEach 函数的 Lambda 表达式都只有一个参数,而遍历 Map 集合时分为两个版本,其中代码第1️⃣行的 forEach 函数的 Lambda 表达式中有两个参数,第一个参数是集合的键,第二个参数是集合的值。代码第2️⃣行的 forEach 函数的 Lambda 表达式中有一个参数,这个参数类型是 Entry,Entry 表示一个键值对的对象,它有两个属性,为 key 和 value。
二、forEachIndexed
使用 forEach 函数无法返回元素的索引,如果既想返回集合元素,又想返回集合元素索引,则可以使用 forEachIndexed 函数,forEachIndexed 适用于 Collection 集合和 数组,而不包括 Map
集合。
fun main(args: Array<String>?) {
val array = arrayOf("老大", "老二", "老三", "老四")
val set = setOf(1, 2, 3)
println("-------- 遍历数组 ---------")
array.forEachIndexed { index, item -> println("{index=$index, element=$item}") }
println("-------- 遍历Set集合 ---------")
set.forEachIndexed { index, value -> println("{index=$index, value=$value}") }
}
// 输出结果
2019-06-13 11:46:50.772 I: -------- 遍历数组 ---------
2019-06-13 11:46:50.772 I: {index=0, element=老大}
2019-06-13 11:46:50.772 I: {index=1, element=老二}
2019-06-13 11:46:50.772 I: {index=2, element=老三}
2019-06-13 11:46:50.772 I: {index=3, element=老四}
2019-06-13 11:46:50.772 I: -------- 遍历Set集合 ---------
2019-06-13 11:46:50.772 I: {index=0, value=1}
2019-06-13 11:46:50.772 I: {index=1, value=2}
2019-06-13 11:46:50.772 I: {index=2, value=3}