Список Котлина.карта() как избежать исключения ConcurrentModificationException

#android #list #concurrentmodificationexception

Вопрос:

У меня проблема с исключением ConcurrentModificationException. Вот моя часть кода :

     var deltaSum = 0
    arrDeltaBrainWaves.map {
         value -> deltaSum  = value
   }
 

Чтобы было ясно — я знаю, почему появляется эта ошибка 🙂 Проблема в том, что я понятия не имею, каково решение ? Действительно ли мне нужно создать новый временный список и поместить туда значения ? Это просто не имеет смысла 🙂 Есть какие-нибудь варианты получше, пожалуйста ?

Редактировать:

Я изменил код на следующий :

 var deltaSum = 0
                                with(arrDeltaBrainWaves.iterator()) {
                                    forEach {
                                        deltaSum  = it
                                    }
                                }
                                avgDelta = deltaSum / arrDeltaBrainWaves.size
 

Но проблема все еще существует.

Ответ №1:

вам нужно использовать итераторы

пример:

 val myCollection = mutableListOf(1,2,3,4)
val iterator = myCollection.iterator()
while(iterator.hasNext()){
    val item = iterator.next()
    //do something
}
 

это позволит избежать исключений ConcurrentModificationExceptions

Комментарии:

1. К сожалению, проблема все еще существует. Пожалуйста, смотрите отредактированный пост.

2. @Bartos Основная причина возникновения этого исключения заключается в том, что у вас может быть какой-то код, который изменяет этот массив. Просто протестируйте два пункта и дайте мне знать об этом. во-первых, добавьте Volatile в свой массив и запустите свой код внутри Synchronized блоков. секонд, не могли бы вы изменить массив на хэшмап? если да, это должно решить это исключение.

Ответ №2:

Исключения ConcurrentModificationException можно избежать с помощью итераторов. Вот способ котлина сделать это:

 with(arrDeltaBrainWaves.iterator()) {
 forEach {
    
 }
}
 

Комментарии:

1.К сожалению, проблема все еще существует. Пожалуйста, смотрите отредактированный пост.

2. Я попробовал код, но не вижу никаких исключений. Вы уверены, что исключение вызвано этим фрагментом кода. Не могли бы вы добавить еще свой код, пожалуйста?