Как скопировать или клонировать mutableList объекта данных без использования карты коллекции в Kotlin
Я создаю копию одного MutableList. Когда я обновляю значение элемента копии MutableList, значение элемента Original List также изменяется. Когда я использую карту, она работает нормально, но это как итерация всего списка. Можно ли как-то достичь без итерации? как копировать элементы 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
1 ответ
ImmutableList.copyOf
копирует список Проблема в том, что вы хотите скопировать элементы списка. Конечно, для этого нужно перебрать список, но так же copyOf
и я не понимаю, почему вы ожидаете, что можно избежать. Немного лучшая версия map
является
array.mapTo(mutableListOf()) { it.copy() }
потому что это повторяется только один раз.
Извините, но не было бы никакого другого способа, чтобы преобразовать один элемент, вам придется прочитать / скопировать его один раз, для n числа элементов вам придется повторять n раз, чтобы получить правильную копию. Единственный другой способ, который я могу придумать, - это сначала создать нужный неизменяемый / изменяемый список, а не копировать все сразу. Надеюсь это поможет