Java ArrayList 转换为 Kotlin 数组

34

有没有一种简单的方法将Java ArrayList转换为Kotlin Array?以下是代码:

fun test(): Array<String> {
  val elems = ArrayList<String>()
  return elems.toArray()
}

出现错误:

main.kt:2:15: error: unresolved reference: ArrayList
  val elems = ArrayList<String>()
              ^

我正在解析一些JSON,不知道最终会有多少元素,但一旦读取它们,我就不需要以任何方式修改数据,所以我想使用Kotlin数组作为数据类型。


2
请更改已接受的答案,@bashor 提供了您问题的简单答案,应该将其作为已接受的答案。否则,您会让来阅读您的问题并寻找直接回答的人感到困惑。 - Jayson Minard
你应该总是发布编译器的错误消息,而不仅仅是“它无法编译”。 - Jayson Minard
@JaysonMinard 谢谢。我添加了编译器输出。 - Simon Morgan
4个回答

103

尝试使用扩展函数 toTypedArray,例如:

fun test(): Array<String> {
    val elems = arrayListOf<String>()
    return elems.toTypedArray()
}

8
这个答案回答了所问的问题。@diesieben07提供的另一个回答中的评论关于列表和数组存在一些有价值的观点,但是当使用数组时,这个答案提供了正确的行为方式。 - Jayson Minard

2

在 Kotlin 中将 ArrayList 转换为数组

 import java.util.*

fun main(args: Array<String>) {

    val list = ArrayList<String>()
    list.add("a")
    list.add("b")

    val array = arrayOfNulls<String>(list.size)
    list.toArray(array)

    println(Arrays.toString(array))

}

输出[a, b]

在 Kotlin 中将数组转换为列表

import java.util.*

fun main(args: Array<String>) {

    val array = arrayOf("a", "b")
    val list = Arrays.asList(*array)

    println(list)

}

输出:[a,b]


1

为什么使用数组?Kotlin数组和Java数组一样是可变的。你应该使用Kotlin List,与MutableList相反,它是不可变的。 至于为什么代码无法编译:toArray返回一个Object[],如果你想从List获取一个String[],则需要使用接受数组作为参数的toArray版本。


9
这不是一个答案,你可以同时回答这个问题并提供自己的观点。这只是提供一个观点。 - Jayson Minard
3
正确的方法是在 @bashor 的回答中指出的 toTypedArray,而不是 toArray - Jayson Minard
1
你的观点是有效和正确的,数组非常不常见,通常只有在需要进行优化或另一个API强制使用它们时才会选择。但是为了回答他的直接问题,请使用ArrayList的扩展方法toTypedArray将其转换为数组。 - Jayson Minard
但有时确实需要进行优化。那么怎么办? - Andrej
ArrayList 确实是使用动态数组的最佳选择。它们像动态数组一样高效,并在运行时使用所需的内存。我喜欢不可变、线程安全、一致、无副作用的数据结构,就像下一个人一样,但现实是有时你需要动态数组,因为你不想不必要地一遍又一遍地复制内容。试着将 5000 万个 Ints 扔到 List 和 ArrayList 中并使用它们来保存数据,你会明白我在说什么 :) - Andrej
显示剩余4条评论

-2

你可以使用 Kotlin List,它很容易使用,将 Java 数组转换为 Kotlin 数组时两者都是可变的。

试试这个...

fun learnlist(){
 var stringList= listOf<String>("a","b","c","d")
    for (st in stringList)
        print(st)

    var intlist= listOf<Int>(1,2,3,4,5)
    for(i in intlist)
        print(i)

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接