Как скопировать или клонировать mutableList объекта данных без использования карты коллекции в Kotlin - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю копию одного 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

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Извините, но не было бы другого способа, чтобы преобразовать один элемент, вам нужно будет прочитать / скопировать его один раз, для n чисел элемента вам придется повторяться n раз, чтобы получить правильную копию.Единственный другой способ, который я могу придумать, - это сначала создать нужный неизменяемый / изменяемый список, а не копировать все сразу.Надеюсь, это поможет

0 голосов
/ 30 ноября 2018

ImmutableList.copyOf копирует список.Проблема в том, что вы хотите скопировать элементы списка.Конечно, для этого нужно перебрать список, но так же и copyOf, и я не понимаю, почему вы ожидаете, что этого можно избежать.Немного лучшей версией map является

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

, потому что она повторяется только один раз.

...