1. 简介
在 Kotlin 开发中,有时我们需要将 List<Int>
转换为 IntArray
,以便进行后续处理。幸运的是,Kotlin 提供了多种方式来完成这一转换。
本文将介绍三种常用方法,并附上完整示例代码,帮助你理解每种方式的使用场景和实现细节。
2. 使用 for 循环
最基础的方式是通过 for
循环手动将 List<Int>
中的每个元素复制到 IntArray
中。虽然写法略显繁琐,但逻辑清晰,适合理解底层机制。
@Test
fun `convert integer list to integer array using for loop`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = IntArray(list.size)
for (i in list.indices) {
result[i] = list[i]
}
assertArrayEquals(expected, result)
}
✅ 优点:直观易懂
❌ 缺点:代码冗长,不够简洁
3. 使用 IntArray 构造函数
Kotlin 提供了 IntArray
的构造函数,允许我们传入数组大小和一个 lambda 表达式来初始化每个元素。
@Test
fun `convert integer list to integer array using the intarray constructor`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = IntArray(list.size) { i -> list[i] }
assertArrayEquals(expected, result)
}
✅ 优点:简洁明了,一行搞定
❌ 缺点:对初学者可能略难理解
4. 使用 toIntArray() 方法
这是最推荐的方式,直接调用 Kotlin 标准库中的 toIntArray()
方法即可完成转换。
@Test
fun `convert integer list to integer array using intArray() method`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = list.toIntArray()
assertArrayEquals(expected, result)
}
如果你还需要对元素进行映射处理,也可以先使用 map()
再转换:
@Test
fun `convert integer list to integer array using map() method`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = list.map { it }.toIntArray()
assertArrayEquals(expected, result)
}
✅ 优点:简洁、高效、推荐方式
✅ 适用场景:大多数情况下首选
5. 使用 toTypedArray() 方法
如果你有一个 List<Int>
,可以先使用 toTypedArray()
转换为 Array<Int>
,然后再用 toIntArray()
转换为 IntArray
。
@Test
fun `convert integer list to integer array using toTypedArray() method`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = list.toTypedArray().toIntArray()
assertArrayEquals(expected, result)
}
⚠️ 注意:toTypedArray()
返回的是对象数组 Array<Int>
,所以必须再调用一次 toIntArray()
才能得到原始类型数组。
6. 使用 stream() 方法(Java 风格)
如果你更习惯 Java 的 Stream 编程风格,也可以使用 stream()
来转换。
@Test
fun `convert integer list to integer array using stream() method`() {
val list = listOf(1, 2, 3, 4, 5)
val expected = intArrayOf(1, 2, 3, 4, 5)
val result = list.stream().mapToInt { it }.toArray()
assertArrayEquals(expected, result)
}
✅ 优点:适合 Java 转 Kotlin 的开发者
❌ 缺点:性能略逊于 Kotlin 原生方式,代码略显冗余
7. 总结
方法 | 是否推荐 | 说明 |
---|---|---|
for 循环 | ❌ | 逻辑清晰但代码冗长 |
IntArray 构造函数 | ✅ | 简洁高效,适合学习 |
toIntArray() | ✅✅✅ | 最推荐,标准库方法 |
toTypedArray() | ⚠️ | 需配合 toIntArray() 使用 |
stream() | ⚠️ | Java 风格,兼容性好但略慢 |
结论:在 Kotlin 中,推荐优先使用 list.toIntArray()
方法进行转换,简洁高效,符合 Kotlin 的编程风格。其他方法可作为特殊情况下的备选方案。