MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

Kotlin标准库函数深入解读

2024-09-094.3k 阅读

Kotlin 标准库函数基础概述

Kotlin 标准库为开发者提供了一系列强大且实用的函数,这些函数大大提升了代码的简洁性与开发效率。标准库函数涵盖多个方面,包括集合操作、字符串处理、类型转换等等。

在 Kotlin 中,许多标准库函数采用了扩展函数的形式。扩展函数允许我们为已有的类添加新的函数,而无需继承该类或使用设计模式。例如,对于 String 类,Kotlin 标准库提供了诸如 splitsubstring 等扩展函数。

val str = "Hello, World!"
val parts = str.split(", ")
println(parts)

上述代码中,split 函数是 String 类的扩展函数,用于根据指定的分隔符将字符串拆分成字符串数组。

集合相关标准库函数

集合创建函数

  1. listOf listOf 函数用于创建一个不可变的列表。它接受可变数量的参数,并按照参数顺序构建列表。
val numbers = listOf(1, 2, 3, 4, 5)
println(numbers)

这里创建了一个包含整数 1 到 5 的不可变列表。

  1. mutableListOflistOf 不同,mutableListOf 创建的是一个可变列表,允许在创建后对列表进行修改,如添加、删除元素等操作。
val mutableNumbers = mutableListOf(1, 2, 3)
mutableNumbers.add(4)
println(mutableNumbers)

在这个例子中,我们先创建了一个包含 1 到 3 的可变列表,然后添加了元素 4。

  1. setOfmutableSetOf setOf 用于创建不可变集合,集合中的元素是唯一的,不允许重复。mutableSetOf 则创建可变集合。
val set = setOf(1, 2, 2, 3)
println(set)  // 输出: [1, 2, 3]

val mutableSet = mutableSetOf(1, 2)
mutableSet.add(3)
println(mutableSet)

setOf 的示例中,重复的元素 2 只会出现一次。而 mutableSetOf 创建的集合可以动态添加元素。

  1. mapOfmutableMapOf mapOf 创建不可变映射,mutableMapOf 创建可变映射。映射是一种键值对的集合,其中每个键都是唯一的。
val map = mapOf("one" to 1, "two" to 2)
println(map)

val mutableMap = mutableMapOf("one" to 1)
mutableMap.put("two", 2)
println(mutableMap)

mapOf 使用 to 关键字来定义键值对。mutableMapOf 则可以通过 put 方法添加新的键值对。

集合操作函数

  1. filter filter 函数用于从集合中筛选出满足特定条件的元素。它接受一个谓词(返回布尔值的函数)作为参数。
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers)

在这个例子中,filter 函数从 numbers 列表中筛选出所有偶数。

  1. map map 函数对集合中的每个元素应用一个转换函数,并返回一个新的集合,新集合中的元素是原集合元素经过转换后的结果。
val numbers = listOf(1, 2, 3)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers)

这里 map 函数将列表中的每个数字平方,返回一个新的包含平方值的列表。

  1. forEach forEach 函数用于对集合中的每个元素执行一个操作。它接受一个 lambda 表达式,该表达式定义了对每个元素要执行的操作。
val numbers = listOf(1, 2, 3)
numbers.forEach { println(it) }

上述代码简单地将列表中的每个数字打印出来。

  1. reduce reduce 函数通过一个累加器将集合中的元素合并为单个值。它接受一个二元操作符(接受两个参数并返回一个值的函数)。
val numbers = listOf(1, 2, 3, 4)
val sum = numbers.reduce { acc, i -> acc + i }
println(sum)

在这个例子中,reduce 函数从列表的第一个元素开始,使用 acc(累加器)逐步将所有元素相加。

  1. fold foldreduce 类似,但它允许指定初始值。
val numbers = listOf(1, 2, 3, 4)
val sumWithInitial = numbers.fold(10) { acc, i -> acc + i }
println(sumWithInitial)

这里初始值为 10,fold 函数将从 10 开始与列表中的元素依次相加。

字符串相关标准库函数

字符串转换函数

  1. toUpperCasetoLowerCase 这两个函数分别将字符串转换为大写和小写形式。
val str = "Hello, World!"
val upperCaseStr = str.toUpperCase()
val lowerCaseStr = str.toLowerCase()
println(upperCaseStr)
println(lowerCaseStr)

toUpperCase 将字符串中的所有字符转换为大写,toLowerCase 则转换为小写。

  1. trim trim 函数用于去除字符串两端的空白字符(空格、制表符、换行符等)。
val strWithWhitespace = "   Hello, World!   "
val trimmedStr = strWithWhitespace.trim()
println(trimmedStr)

此例中,trim 函数去除了字符串两端的空白字符。

字符串匹配与查找函数

  1. contains contains 函数用于检查字符串是否包含指定的子字符串。
val str = "Hello, World!"
val containsSubStr = str.contains("World")
println(containsSubStr)

这里 contains 函数判断 str 是否包含子字符串 "World"。

  1. indexOf indexOf 函数返回指定子字符串在字符串中第一次出现的索引位置,如果不存在则返回 -1。
val str = "Hello, World!"
val index = str.indexOf("World")
println(index)

上述代码中,indexOf 函数返回子字符串 "World" 在字符串中的起始索引。

  1. lastIndexOfindexOf 相反,lastIndexOf 返回指定子字符串在字符串中最后一次出现的索引位置。
val str = "Hello, World! World!"
val lastIndex = str.lastIndexOf("World")
println(lastIndex)

在此例中,lastIndexOf 函数找到子字符串 "World" 最后一次出现的位置。

字符串拆分与合并函数

  1. split split 函数根据指定的分隔符将字符串拆分成字符串数组。
val str = "apple,banana,orange"
val parts = str.split(",")
println(parts)

这里 split 函数以逗号为分隔符,将字符串拆分成了一个包含水果名称的字符串数组。

  1. joinToString joinToString 函数将集合中的元素连接成一个字符串,并可以指定分隔符、前缀和后缀。
val fruits = listOf("apple", "banana", "orange")
val joinedStr = fruits.joinToString(", ", "[", "]")
println(joinedStr)

在这个例子中,joinToString 函数将列表中的水果名称连接成一个字符串,以逗号和空格为分隔符,前缀为 "[", 后缀为 "]"。

类型转换相关标准库函数

基本类型转换函数

  1. toInttoLongtoFloattoDouble 等 这些函数用于将字符串或其他数值类型转换为指定的基本类型。
val strNumber = "10"
val intNumber = strNumber.toInt()
val doubleNumber = intNumber.toDouble()
println(intNumber)
println(doubleNumber)

toInt 函数将字符串 "10" 转换为整数,toDouble 函数将整数转换为双精度浮点数。

  1. toString toString 函数将各种类型转换为字符串。几乎所有的 Kotlin 类型都继承了 toString 函数。
val number = 10
val str = number.toString()
println(str)

这里将整数 10 转换为字符串 "10"。

可空类型转换函数

  1. let let 函数用于在可空对象不为空时执行一个操作,并返回操作结果。它可以避免繁琐的空值检查。
val nullableStr: String? = "Hello"
nullableStr?.let {
    val length = it.length
    println(length)
}

在这个例子中,let 函数只有在 nullableStr 不为空时才会执行内部的代码块,获取字符串的长度并打印。

  1. run run 函数与 let 类似,但它可以在对象内部直接调用,无需使用 it 指代对象。
val nullableStr: String? = "Hello"
nullableStr?.run {
    val length = length
    println(length)
}

这里 run 函数在 nullableStr 不为空时执行代码块,同样获取字符串长度并打印。

  1. also also 函数用于在对象不为空时执行一个操作,并返回原对象。它主要用于在对象不为空时进行一些额外的操作,如日志记录等。
val nullableStr: String? = "Hello"
nullableStr?.also {
    println("Processing string: $it")
}?.length

在此例中,also 函数在处理字符串之前打印一条日志信息,然后继续获取字符串长度。

函数式编程相关标准库函数

高阶函数

  1. apply apply 函数是一个高阶函数,它对调用它的对象执行一个 lambda 表达式,并返回该对象本身。这在对象初始化时非常有用。
val list = mutableListOf<Int>().apply {
    add(1)
    add(2)
    add(3)
}
println(list)

这里通过 apply 函数在创建可变列表的同时添加了一些元素。

  1. with with 函数接受一个对象和一个 lambda 表达式,在 lambda 表达式中可以直接访问对象的属性和方法,而无需使用对象名。
val str = "Hello, World!"
val length = with(str) {
    length
}
println(length)

在这个例子中,with 函数允许在其代码块内直接访问 strlength 属性。

函数组合

  1. compose compose 函数用于组合两个函数,先执行第一个函数,然后将第一个函数的结果作为参数传递给第二个函数。
fun addOne(x: Int): Int = x + 1
fun multiplyByTwo(x: Int): Int = x * 2

val composedFunction = ::addOne.compose(::multiplyByTwo)
val result = composedFunction(3)
println(result)

这里 compose 函数将 multiplyByTwoaddOne 组合起来,先将 3 乘以 2,然后再加 1。

  1. andThen andThencompose 相反,它先执行调用 andThen 的函数,然后将结果传递给作为参数的函数。
fun addOne(x: Int): Int = x + 1
fun multiplyByTwo(x: Int): Int = x * 2

val composedFunction = ::multiplyByTwo.andThen(::addOne)
val result = composedFunction(3)
println(result)

此例中,andThen 函数先将 3 乘以 2,然后再加 1,与 compose 的执行顺序相反。

其他常用标准库函数

数学相关函数

  1. maxmin max 函数返回两个值中的较大值,min 函数返回较小值。
val a = 10
val b = 20
val maxValue = max(a, b)
val minValue = min(a, b)
println(maxValue)
println(minValue)

这里 max 函数返回 20,min 函数返回 10。

  1. abs abs 函数返回一个数的绝对值。
val number = -5
val absValue = abs(number)
println(absValue)

abs 函数将 -5 转换为 5。

文件操作相关函数(简化示例)

  1. readText 在 Kotlin 中,可以使用 readText 函数读取文件内容。
try {
    val content = File("example.txt").readText()
    println(content)
} catch (e: Exception) {
    e.printStackTrace()
}

此代码尝试读取 example.txt 文件的内容并打印出来。

  1. writeText writeText 函数用于将文本写入文件。
try {
    File("example.txt").writeText("Hello, this is some text.")
} catch (e: Exception) {
    e.printStackTrace()
}

这里将字符串 "Hello, this is some text." 写入到 example.txt 文件中。

通过深入理解和运用 Kotlin 标准库函数,开发者能够更加高效地编写代码,提升代码的可读性和可维护性。无论是集合操作、字符串处理还是函数式编程等方面,标准库函数都为 Kotlin 开发者提供了强大的工具集。