java.util.ConcurrentModificationException при попытке удалить элемент из списка в Android - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть список вариантов, где у каждого варианта есть список цветов.Я хочу проверить для каждого варианта, если есть цвет из фильтра, и если нет, я хочу удалить этот вариант из списка вариантов.Когда я пытался удалить, я получаю сообщение об ошибке: java.util.ConcurrentModificationException Это то, что я пытался:

list.map { variant ->
    variant.variantColors.map { color ->
        if (color != filterModel.color) {
            list.removeIf { color != filterModel.color }
        }
    }
}

и:

list.map { variant ->
    variant.variantColors.map { color ->
        if (color != filterModel.color) {
            list.removeAll { color != filterModel.color }
        }
    }
}

и:

val iterator = list.iterator()
while (iterator.hasNext()) {
    val item = iterator.next()
    val iteratorSec = item.variantColors.iterator()
    while (iteratorSec.hasNext()) {
        val itema = iteratorSec.next()
        if (itema != filterModel.color)
            iterator.remove()
    }
}

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Использовать список Функция фильтра как это подходит для вашей концепции

 fun main()
 {
  val myList : MutableList<ColorInfo> = mutableListOf(
    ColorInfo(color = "red",colorcode = "1111"),
    ColorInfo(color = "green",colorcode = "1123"),
    ColorInfo(color = "yellow",colorcode = "1134")
)


val filteredList = myList.filter { !it.color.equals("red") }
println(filteredList.toString())
 //out put is [Event(color=green, colorcode=1123), Event(color=yellow, colorcode=1134)]
}

data class ColorInfo(var color : String,var colorcode : String)
0 голосов
/ 09 апреля 2019

Это происходит из-за того, что вы пытаетесь изменить свой список внутри map() обратного вызова, пока он перебирает список.Чтобы избежать этого, вы должны сначала вызвать removeAll () / removeIf ():

class Variant(val colors: List<Int>)

fun main() {
    val badColor = 2
    val variants = mutableListOf(
            Variant(listOf(1, 2, 3)),
            Variant(listOf(2, 4, 6)),
            Variant(listOf(3, 5, 7)))
    // try removeAll()
    variants.removeAll {
        it in variants.filter {variant ->
            badColor in variant.colors
        }
    }
    //  or removeIf()
    variants.removeIf {
        badColor in it.colors
    }

    print(variants)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...