将Array<String>转换为ArrayList<String>

11

在 Kotlin 中,如何将 Array<String> 转换为 ArrayList<String>

var categoryList : ArrayList<String>?=null
val list = arrayOf("None", "ABC")
categoryList = ArrayList(Arrays.asList(list))
我收到了这个错误:

Error


翻译后:

我收到了这个错误:Error

Type inference failed. Expected type mismatch: inferred type is kotlin.collections.ArrayList<Array<String>!> /* = java.util.ArrayList<Array<String>!> */ but kotlin.collections.ArrayList<String>? /* = java.util.ArrayList<String>? */ was expected

可能是从数组创建ArrayList的重复问题。 - Manohar
@Roland 对不起,我的错,他最初标记它为Java,我应该仔细看完整个代码。在这种情况下,它是在Kotlin中将数组转换为列表的重复。 - Manohar
@ManoharReddy 没问题...在我的评论之后看到了那个编辑;-)...嗯...肯定相似...但是...它在此之前定义了一个类型,然后在那里得到了错误的类型...在我看来,这是同样的问题,但有两个不同的起点...我真的在寻找提到那个错误消息的问题,但找不到...想知道为什么链接的问题中没有提到扩展运算符.... - Roland
5个回答

20

您可能会对toCollection感兴趣,它可以将元素添加到您传递的任何集合中:

categoryList = list.toCollection(ArrayList())

请注意,为了解决您的具体问题,您只需要使用展开操作符(*)。应用*-修复后,它也可以正常工作:

categoryList = ArrayList(Arrays.asList(*list))

1
也许你对 list.toMutableList() 感兴趣,这取决于你是否真的需要那个 ArrayList;-) - Roland

3

希望这可以帮助到你。

var categoryList : ArrayList<String>?=null
val list = arrayOf("None", "ABC")
categoryList = list.toCollection(ArrayList())

1
另一种方法是使用 arrayListOf
 categoryList =arrayListOf("None", "ABC")

0

展开运算符和arrayListOf是另一个选项:

var categoryList : ArrayList<String>?=null
val list = arrayOf("None", "ABC")
categoryList = arrayListOf(*list)

-1

import kotlin.collections.ArrayList

var arr:List<String>=["one","two"]<br>
val array_list:ArrayList<String>=ArrayList(arr)



1
感谢您提供答案。您是否可以编辑您的答案并包含代码解释?这将有助于未来的读者更好地理解正在发生的事情,特别是那些对该语言感到陌生并且难以理解概念的社区成员。 - Jeremy Caney
1
值得注意的是,考虑到这个答案已经两年了,有三个现有的答案,包括一个被接受的答案,帮助解释在什么情况下您的方法更可取,并说明它与现有答案的不同之处将非常有用。 - Jeremy Caney

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