我创建一个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
答案 0 :(得分:0)
ImmutableList.copyOf
确实复制了列表。问题是您还想复制列表中的元素。当然,您必须遍历列表才能做到这一点,但是copyOf
也是如此,我不明白为什么您希望可以避免这种情况。 map
的更好版本是
array.mapTo(mutableListOf()) { it.copy() }
因为它只迭代一次。
答案 1 :(得分:0)
很抱歉,但是没有其他方法导致转换一个元素,您将不得不读取/复制一次,对于n个元素,您必须迭代n次才能获得正确的副本。 我唯一想到的另一种方法是首先创建所需的不可变/可变列表,而不是稍后再复制所有列表。 希望这会有所帮助