Как скопировать или клонировать 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 раз, чтобы получить правильную копию. Единственный другой способ, который я могу придумать, - это сначала создать нужный неизменяемый / изменяемый список, а не копировать все сразу. Надеюсь это поможет

Другие вопросы по тегам