Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

201
Vistas
La modificación de una SnapshotStateList arroja ConcurrentModificationException

La documentación de SnapshotStateList establece que es similar a una lista mutable regular. Tengo un caso de uso en el que necesito modificar todos los elementos de la lista ( set case ). Esto no cambia el tamaño de la lista, pero me encuentro con ConcurrentModificationException.

He creado una versión muy simplificada de mi caso de uso aquí. La siguiente lista de kotlin funciona bien:

 val myList2 = mutableListOf("a", "b", "c") myList2.forEachIndexed { index, _ -> // Modify item at index myList2[index] = "x" }

Pero obtengo una excepción de modificación concurrente aquí:

 val myList = mutableStateListOf("a", "b", "c") myList.forEachIndexed { index, _ -> // Modify item at index but I get an exception myList[index] = "x" }

¿Cómo puedo modificar todos los elementos de mutableStateList() en su lugar sin obtener la excepción de modificación simultánea?

Editar:

Puedo crear una copia de mutableStateList para iterar sobre cuál funciona bien, pero dado que no estoy cambiando el tamaño de la lista, ¿es posible hacerlo en su lugar?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Algunas posibles soluciones son usar replaceAll para transformar la lista en el lugar (siempre y cuando no necesite el índice), o simplemente usar un bucle antiguo sobre los índices si lo necesita.

 val listA = mutableListOf("A","B","C") // this works listA.forEachIndexed { i, s -> listA[i] = s.lowercase() } val listB = mutableStateListOf("A","B","C") // this fails - as you noted listB.forEachIndexed { i, s -> listB[i] = s.lowercase() } // this works, as long as you don't need the index listB.replaceAll { s -> s.lowercase() } // this also works, and lets you have the index for(i in listB.indices) { listB[i] = listB[i].lowercase() }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda