Saltar al contenido

cómo evitar ConcurrentModificationException kotlin

Solución:

Ese es un problema común con la JVM, si desea eliminar un elemento de una colección mientras lo recorre, debe usar los iteradores

ejemplo:

val myCollection = mutableListOf(1,2,3,4)
val iterator = myCollection.iterator()
while(iterator.hasNext()){
    val item = iterator.next()
    if(item == 3){
        iterator.remove()
    }
}

esto evitará ConcurrentModificationExceptions

Espero que esto responda a tu pregunta, que tengas un buen día.

Editar: puede encontrar otra explicación aquí, incluso si es código Java, el problema es el mismo
Editar n ° 2 la respuesta de leonardkraemer le muestra una forma más amigable con Kotlin de hacerlo

En Kotlin puedes usar removeIf{ predicate }. Que es una forma abreviada de usar el Iterator. Declaración completa:

listAccounts.removeIf{ it == account.id }

para obtener una explicación, consulte Iterando a través de una colección, evitando ConcurrentModificationException al eliminar objetos en un bucle

Actualizar: Kotlin-stdlib introducido removeAll { predicate } que, como señaló Aguragorn en su respuesta, hace lo mismo y puede usarse si removeIf no está presente en su entorno de ejecución (es decir, Java 1.6 o Android pre API nivel 24).

with(listAccounts.iterator()) {
    forEach {
        if (it.id == someObj.id) {
            // do some stuff with it
            oldSubscription = it
            remove()
        }
    }
}

Misma solución que SeekDaSky pero más Kotlin’y

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *