Kotlin中函数式编程API(2)✔️遍历操作

2019-06-13  本文已影响0人  狼性代码人
  • forEach
  • forEachIndexed

  for 循环是一种比较传统的遍历方法。而函数式编程遍历数据应该使用 forEachforEachIndexed 函数。

一、forEach

  forEach函数使用于CollectionMap集合以及数组,函数只有一个是函数类型的参数,这个实参往往使用尾随形式的 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 表达式中有一个参数,这个参数类型是 EntryEntry 表示一个键值对的对象,它有两个属性,为 keyvalue

二、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}
上一篇下一篇

猜你喜欢

热点阅读