Kotlin 拥有许多实用函数,这些函数能够简化代码编写过程,提高代码的可读性和效率。以下是一些 Kotlin 中的实用函数:

对象操作相关

  1. apply()

    • 作用:在被调用对象的上下文中执行一个 lambda 表达式,并返回这个被调用的对象。非常适合在初始化对象时设置其属性。
    • 示例:val person = Person().apply { name = "Alice"; age = 25 }
  2. let()

    • 作用:将调用它的对象作为参数传递给 lambda 表达式,并返回 lambda 表达式的结果。对于对一个对象执行一系列操作并返回结果非常有用,特别是在处理可为空的对象时,let() 可以与 ?. 运算符结合使用,以避免空指针异常。
    • 示例:val length = "Hello, World!".let { println(it); it.length }
  3. run()

    • 作用:与 apply() 类似,它在调用对象的上下文中执行 lambda 表达式,但与 apply() 不同的是,它返回的是 lambda 表达式的结果。
    • 示例:val greeting = "Hello".run { val suffix = ", World!"; this + suffix }
  4. also()

    • 作用:将对象作为参数传递给 lambda 表达式,但忽略 lambda 的返回值,并返回调用它的对象。这对于执行一些操作,如日志记录或调试,而不改变对象本身很有用。
    • 示例:val numbers = mutableListOf("one", "two", "three").also { println("The list elements before adding new one: $it") }.apply { add("four") }
  5. with()

    • 作用:将对象作为参数传递给 lambda 表达式,并返回 lambda 的结果。它类似于 let(),但不是以扩展函数的形式调用,而是将对象作为参数传递。
    • 示例:val message = with(StringBuilder()) { append("Hello"); append(" "); append("Kotlin"); toString() }

集合操作相关

  1. forEach()

    • 作用:遍历集合中的每个元素,并对每个元素执行给定的操作。
    • 示例:val stringList = arrayListOf("1", "2", "3"); stringList.forEach { println("forEach: $it") }
  2. filter()

    • 作用:根据给定的条件过滤集合中的元素,并返回一个新的集合,其中只包含满足条件的元素。
    • 示例:val numbers = listOf(1, -2, 3, -4, 5, -6); val positives = numbers.filter { it > 0 }
  3. map()

    • 作用:将集合中的每个元素应用一个给定的转换函数,并返回一个新的集合,其中包含了转换后的元素。
    • 示例:val numbers = listOf(1, -2, 3, -4, 5, -6); val doubled = numbers.map { it * 2 }
  4. any()

    • 作用:检查集合中是否至少有一个元素满足给定的条件,并返回一个布尔值。
    • 示例:val numbers = listOf(1, 2, 3, 4, 5); val hasEven = numbers.any { it % 2 == 0 }
  5. all()

    • 作用:检查集合中的所有元素是否都满足给定的条件,并返回一个布尔值。
    • 示例:val numbers = listOf(1, 2, 3, 4, 5); val allPositive = numbers.all { it > 0 }
  6. none()

    • 作用:检查集合中是否没有任何元素满足给定的条件(或集合是否为空),并返回一个布尔值。
    • 示例:val numbers = listOf(1, 2, 3, 4, 5); val noEven = numbers.none { it % 2 == 0 }(注意:这里的 none 在没有参数时检查集合是否为空,有参数时检查是否没有元素满足条件)
  7. find() 和 findLast()

    • 作用:查找集合中第一个或最后一个满足给定条件的元素,并返回该元素(如果找到)。
    • 示例:val test = listOf("one", "two", "three", "four", "five", "six"); val found = test.find { it.length > 3 }
  8. indexOf() 和 lastIndexOf()

    • 作用:查找元素在集合中的位置(索引),indexOf() 返回第一个匹配元素的索引,lastIndexOf() 返回最后一个匹配元素的索引。
    • 示例:val numbers = listOf(1, 2, 3, 4, 2, 5); val firstTwoIndex = numbers.indexOf(2); val lastTwoIndex = numbers.lastIndexOf(2)
  9. slice()

    • 作用:返回指定索引的元素列表。
    • 示例:val intList = intArrayOf(1, 2, 3, 4, 5); val sliced = intList.slice(listOf(0, 2, 4)).toList()
  10. take() 和 drop()

    • 作用:take() 返回前 N 个元素列表,drop() 返回除去前 N 项的所有元素。
    • 示例:val intList = intArrayOf(1, 2, 3, 4, 5); val taken = intList.take(2).toList(); val dropped = intList.drop(2).toList()
  11. sortedBy() 和 sort()

    • 作用:对集合进行排序,sortedBy() 根据指定的属性或函数进行排序(返回新集合),sort() 直接在原集合上进行排序。
    • 示例:val numbers = listOf(5, 3, 4, 1, 2); val sorted = numbers.sortedBy { it }; numbers.sort()
  12. reverse()

    • 作用:返回逆序元素列表(返回新集合,原集合不变)。
    • 示例:val intList = intArrayOf(1, 2, 3, 4, 5); val reversed = intList.asList().reverse()
  13. windowed()

    • 作用:用于处理集合中的滑动窗口,返回包含窗口的列表。
    • 示例:val numbers = listOf(1, 2, 3, 4, 5, 6); val windows = numbers.windowed(size = 3, step = 2)

其他实用函数

  1. buildList() 和 buildMap()

    • 作用:以更简洁和表达力强的方式创建和初始化列表和映射。
    • 示例:val numbers = buildList { add(1); add(2); add(3) }; val fruits = buildMap { put("apple", 2); put("banana", 3) }
  2. takeIf() 和 takeUnless()

    • 作用:对对象执行条件变换,根据条件返回对象或 null。
    • 示例:val number: Int? = 42; val squared = number?.takeIf { it > 0 }?.let { it * it }
  3. distinctBy()

    • 作用:根据特定属性或转换函数从集合中过滤元素,只保留不同的元素。
    • 示例:val people = listOf("Alice", "Bob", "Charlie", "alice"); val distinctPeople = people.distinctBy { it.toLowerCase() }
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐