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 的编程风格。其他方法可作为特殊情况下的备选方案。


原始标题:How to Convert Integer List to IntArray in Kotlin