Создайте ArrayList, атрибуты которого тоже имеют ArrayList - PullRequest
0 голосов
/ 03 апреля 2020

У меня проблема с созданием данных ArrayList, атрибуты которых тоже имеют ArrayList. Данные модели выглядят так:

data class DataArrayInArray02(
    val no: Int? = null,
    val dataArray: ArrayList<Int>
)

Я хочу получить данные DataArrayInArray02 , например. Result 1: Get data DataArrayInArray02

Это мой код

fun main() {
    val dataArrayInArray = ArrayList<DataArrayInArray02>()
    val dataChildrenArray = ArrayList<Int>()

    for (i in 0..3) {
        val data = (0..10).random()
        for (j in 0..data) {
            val d = (1..1000).random()
            dataChildrenArray.add(d)
        }
        dataArrayInArray.add(DataArrayInArray02(i+1, dataChildrenArray))
        println("ID : ${dataArrayInArray[i].no}, Data : ${dataArrayInArray[i].dataArray}")
        dataChildrenArray.clear()
    }
}

Когда я запускаю этот код, я получаю результат, как на картинке выше.

I вызов dataArrayInArray с использованием цикла «for» выглядит следующим образом.

for (j in 0 until dataArrayInArray.size) {
        println("ID : ${dataArrayInArray[j].no}, Data : ${dataArrayInArray[j].dataArray}")
    }

Но я получаю такой результат.

Result 2: Get Empty Data for Attribute dataArray

Итак, какой код неверен? Это из-за использования dataChildrenArray.clear () ? Если я удалю этот код. Результат будет выглядеть так:

ID : 1, Data : [915, 565, 591, 254, 67]
ID : 2, Data : [915, 565, 591, 254, 67, 258, 57, 767, 866, 986, 558, 187, 976]

, где ID 2 должен отображать только данные [258, 57, 767, 866, 986, 558, 187, 976].

Как решить эта проблема?

1 Ответ

2 голосов
/ 03 апреля 2020

Вы передаете один и тот же экземпляр ArrayList<Int> каждому экземпляру DataArrayInArray02 в списке верхнего уровня. Чтобы исправить свой код, переместите строку

val dataChildrenArray = ArrayList<Int>()

внутри вашего for l oop, чтобы для каждого ребенка создавалась новая строка.

Если вы согласны с использованием списка вместо ArrayList вы можете упростить это:

val dataArrayInArray = (1..4).map { i ->
        val innerListSize = (0..10).random()
        val innerList = (0..innerListSize).map { (1..1000).random() }
        DataArrayInArray02(i, innerList)
    }
...