【问题标题】:Java ArrayList to Kotlin ArrayJava ArrayList 到 Kotlin 数组
【发布时间】:2023-03-31 19:46:01
【问题描述】:

有没有一种将 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,不知道最终会得到多少元素,但是一旦我阅读了它们,我就不需要以任何方式修改数据,所以我想我' d 使用 Kotlin 数组作为数据类型。

【问题讨论】:

  • 请更改接受的答案,@bashor 为您的问题提供了简单的答案,这应该是接受的答案。否则,您会迷惑那些来阅读您的问题并寻求直接回应的人。
  • 你应该总是发布编译器的错误信息,而不仅仅是“它不编译”
  • @JaysonMinard 谢谢。我添加了编译器输出。

标签: arrays arraylist kotlin


【解决方案1】:

为什么要使用数组? Kotlin 数组和 Java 数组一样是可变的。您应该使用 Kotlin 列表,与 MutableList 不同,它是不可变的。 至于为什么代码不能编译:toArray 返回一个 Object[],如果你想要一个 List 中的 String[],你需要使用 toArray 版本,它接受一个 Array 作为它的参数。

【讨论】:

  • Kotlin 的列表是这项工作的完美选择。它适用于 java 的 ArrayList,因此它尽可能快速和紧凑。通常,除非您需要非常具体的低级优化,否则您不应该在 kotlin 中使用数组。许多传统方法不适用于数组,例如不可迭代。
  • 这不是答案,您可以在回答问题的同时提供意见。这只是提供一个意见。
  • 正确的方法是@bashor 的回答中指出的toTypedArray,而不是toArray
  • 您的意见是有效且正确的,数组非常少见,通常仅在需要进行优化或其他 API 强加于您时才作为选择。但是要回答他的直接问题,请使用toTypedArrayArrayList 上的扩展方法将其转换为数组。
  • Immutable 与否并不是数组与只读 Kotlin 列表的有力论据。一个更有力的论点是使用List,因为它有更多的功能可以轻松使用,API 的接受列表比数组多(Jetbrains 曾经对数组的使用情况进行过统计分析),并且没有任何真正的性能优势此用例的数组。最好继续使用List,除非需要优化内存/速度,并且通常分析会告诉您何时需要该步骤。
【解决方案2】:

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

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

【讨论】:

  • 这个答案对于所提出的问题是正确的。 @diesieben07 的另一个答案中的评论对列表和数组提出了有效的观点,但这个答案是使用数组时的正确行为。
【解决方案3】:

您可以使用 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)

}

【讨论】:

    【解决方案4】:

    在 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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2012-03-18
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多