kotlin有哪些实用函数?
Kotlin 拥有许多实用函数,这些函数能够简化代码编写过程,提高代码的可读性和效率。
·
Kotlin 拥有许多实用函数,这些函数能够简化代码编写过程,提高代码的可读性和效率。以下是一些 Kotlin 中的实用函数:
对象操作相关
-
apply()
- 作用:在被调用对象的上下文中执行一个 lambda 表达式,并返回这个被调用的对象。非常适合在初始化对象时设置其属性。
- 示例:
val person = Person().apply { name = "Alice"; age = 25 }
-
let()
- 作用:将调用它的对象作为参数传递给 lambda 表达式,并返回 lambda 表达式的结果。对于对一个对象执行一系列操作并返回结果非常有用,特别是在处理可为空的对象时,let() 可以与
?.运算符结合使用,以避免空指针异常。 - 示例:
val length = "Hello, World!".let { println(it); it.length }
- 作用:将调用它的对象作为参数传递给 lambda 表达式,并返回 lambda 表达式的结果。对于对一个对象执行一系列操作并返回结果非常有用,特别是在处理可为空的对象时,let() 可以与
-
run()
- 作用:与 apply() 类似,它在调用对象的上下文中执行 lambda 表达式,但与 apply() 不同的是,它返回的是 lambda 表达式的结果。
- 示例:
val greeting = "Hello".run { val suffix = ", World!"; this + suffix }
-
also()
- 作用:将对象作为参数传递给 lambda 表达式,但忽略 lambda 的返回值,并返回调用它的对象。这对于执行一些操作,如日志记录或调试,而不改变对象本身很有用。
- 示例:
val numbers = mutableListOf("one", "two", "three").also { println("The list elements before adding new one: $it") }.apply { add("four") }
-
with()
- 作用:将对象作为参数传递给 lambda 表达式,并返回 lambda 的结果。它类似于 let(),但不是以扩展函数的形式调用,而是将对象作为参数传递。
- 示例:
val message = with(StringBuilder()) { append("Hello"); append(" "); append("Kotlin"); toString() }
集合操作相关
-
forEach()
- 作用:遍历集合中的每个元素,并对每个元素执行给定的操作。
- 示例:
val stringList = arrayListOf("1", "2", "3"); stringList.forEach { println("forEach: $it") }
-
filter()
- 作用:根据给定的条件过滤集合中的元素,并返回一个新的集合,其中只包含满足条件的元素。
- 示例:
val numbers = listOf(1, -2, 3, -4, 5, -6); val positives = numbers.filter { it > 0 }
-
map()
- 作用:将集合中的每个元素应用一个给定的转换函数,并返回一个新的集合,其中包含了转换后的元素。
- 示例:
val numbers = listOf(1, -2, 3, -4, 5, -6); val doubled = numbers.map { it * 2 }
-
any()
- 作用:检查集合中是否至少有一个元素满足给定的条件,并返回一个布尔值。
- 示例:
val numbers = listOf(1, 2, 3, 4, 5); val hasEven = numbers.any { it % 2 == 0 }
-
all()
- 作用:检查集合中的所有元素是否都满足给定的条件,并返回一个布尔值。
- 示例:
val numbers = listOf(1, 2, 3, 4, 5); val allPositive = numbers.all { it > 0 }
-
none()
- 作用:检查集合中是否没有任何元素满足给定的条件(或集合是否为空),并返回一个布尔值。
- 示例:
val numbers = listOf(1, 2, 3, 4, 5); val noEven = numbers.none { it % 2 == 0 }(注意:这里的none在没有参数时检查集合是否为空,有参数时检查是否没有元素满足条件)
-
find() 和 findLast()
- 作用:查找集合中第一个或最后一个满足给定条件的元素,并返回该元素(如果找到)。
- 示例:
val test = listOf("one", "two", "three", "four", "five", "six"); val found = test.find { it.length > 3 }
-
indexOf() 和 lastIndexOf()
- 作用:查找元素在集合中的位置(索引),
indexOf()返回第一个匹配元素的索引,lastIndexOf()返回最后一个匹配元素的索引。 - 示例:
val numbers = listOf(1, 2, 3, 4, 2, 5); val firstTwoIndex = numbers.indexOf(2); val lastTwoIndex = numbers.lastIndexOf(2)
- 作用:查找元素在集合中的位置(索引),
-
slice()
- 作用:返回指定索引的元素列表。
- 示例:
val intList = intArrayOf(1, 2, 3, 4, 5); val sliced = intList.slice(listOf(0, 2, 4)).toList()
-
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()
- 作用:
-
sortedBy() 和 sort()
- 作用:对集合进行排序,
sortedBy()根据指定的属性或函数进行排序(返回新集合),sort()直接在原集合上进行排序。 - 示例:
val numbers = listOf(5, 3, 4, 1, 2); val sorted = numbers.sortedBy { it }; numbers.sort()
- 作用:对集合进行排序,
-
reverse()
- 作用:返回逆序元素列表(返回新集合,原集合不变)。
- 示例:
val intList = intArrayOf(1, 2, 3, 4, 5); val reversed = intList.asList().reverse()
-
windowed()
- 作用:用于处理集合中的滑动窗口,返回包含窗口的列表。
- 示例:
val numbers = listOf(1, 2, 3, 4, 5, 6); val windows = numbers.windowed(size = 3, step = 2)
其他实用函数
-
buildList() 和 buildMap()
- 作用:以更简洁和表达力强的方式创建和初始化列表和映射。
- 示例:
val numbers = buildList { add(1); add(2); add(3) }; val fruits = buildMap { put("apple", 2); put("banana", 3) }
-
takeIf() 和 takeUnless()
- 作用:对对象执行条件变换,根据条件返回对象或 null。
- 示例:
val number: Int? = 42; val squared = number?.takeIf { it > 0 }?.let { it * it }
-
distinctBy()
- 作用:根据特定属性或转换函数从集合中过滤元素,只保留不同的元素。
- 示例:
val people = listOf("Alice", "Bob", "Charlie", "alice"); val distinctPeople = people.distinctBy { it.toLowerCase() }
更多推荐
所有评论(0)