0

我创建了一个 MutableList 的副本。当我更新副本 MutableList 的元素值但原始列表元素值也发生了变化。当我使用 map 它工作正常但它就像整个列表的迭代,有什么方法可以在没有迭代的情况下实现?如何复制 MutableList 的元素。

    val array: MutableList<UserData> = ArrayList()
    val userData = UserData("DataOne")
    array.add(userData)

    val arrayCopy = ImmutableList.copyOf(array)// not working
    //val arrayCopy = array.toMutableList()// not working
   // val arrayCopy = array.map { it.copy() }.toMutableList()//working

    Log.i("----> array ", array[0].name)//print DataOne
    Log.i("----> arrayCopy ", arrayCopy[0].name)//print DataOne

    arrayCopy[0].name = "DataTwo"
    Log.d("----> array ", array[0].name)//print DataTwo
    Log.d("----> arrayCopy", arrayCopy[0].name) //print DataTwo
4

2 回答 2

1

ImmutableList.copyOf确实复制了列表。问题是您还想复制列表的元素。当然,您必须遍历列表才能做到这一点,但也是如此copyOf,我不明白为什么您希望可以避免。稍微好一点的版本map

 array.mapTo(mutableListOf()) { it.copy() }

因为它只迭代一次。

于 2018-11-30T09:06:08.620 回答
0

抱歉,但不会有任何其他方式导致转换一个元素,您必须读取/复制一次,对于 n 个元素,您必须迭代 n 次才能获得正确的副本。我能想到的唯一另一种方法是首先创建所需的不可变/可变列表,而不是稍后一次性复制它。希望这可以帮助

于 2018-12-02T18:04:25.653 回答