如何在Kotlin复制列表?

我使用

val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)

有没有更简单的方法?


当前回答

以我之见,最好也是最常用的方法是在Kotlin(1.6+)的新版本中使用集合构建器。

   val shallowListCopy = buildList { addAll(list) }

其他回答

我建议你做个肤浅的拷贝

.map{it}

这将适用于许多收集类型。

在尝试浅拷贝,深拷贝克隆和更多的我发现这个解决方案肯定会为你工作。

val iterator: Iterator<Object> = yourList.iterator()
        while (iterator.hasNext())
        newList.add(iterator.next().copy())

你可以使用

工作表 -> 到列表()

数组 -> toArray()

ArrayList -> toArray()

MutableList -> toMutableList()


例子:

val array = arrayListOf("1", "2", "3", "4")

val arrayCopy = array.toArray() // copy array to other array

Log.i("---> array " ,  array?.count().toString())
Log.i("---> arrayCopy " ,  arrayCopy?.count().toString())

array.removeAt(0) // remove first item in array 

Log.i("---> array after remove" ,  array?.count().toString())
Log.i("---> arrayCopy after remove" ,  arrayCopy?.count().toString())

打印日志:

array: 4
arrayCopy: 4
array after remove: 3
arrayCopy after remove: 4

试试下面的代码复制列表在Kotlin

arrayList2.addAll(arrayList1.filterNotNull())

就像在Java中一样:

列表:

    val list = mutableListOf("a", "b", "c")
    val list2 = ArrayList(list)

Map:

    val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)
    val map2 = HashMap(map)

假设你的目标是JVM(或Android);我不确定它是否适用于其他目标,因为它依赖于ArrayList和HashMap的复制构造函数。