我有一个帐户列表,当我进行长时间单击时,我想从列列表中删除该项目。我试图从一个警报对话框中删除它,但是我得到了ConcurrentModificationException。这就是崩溃的地方:
listAccounts.forEachIndexed { index, account ->
if (idParamether == account.id) {
listAccounts.remove(account)
}
}
发布于 2018-04-25 22:20:54
这是JVM的一个常见问题,如果您想在迭代集合时从集合中删除一个项,则需要使用迭代器
例:
val myCollection = mutableListOf(1,2,3,4)
val iterator = myCollection.iterator()
while(iterator.hasNext()){
val item = iterator.next()
if(item == 3){
iterator.remove()
}
}
这将避免ConcurrentModificationExceptions
我希望这回答了你的问题,祝你今天愉快。
编辑:您可以找到另一个解释,即使是这里代码,问题也是一样的
编辑n°2,leonardkraemer的作者,向您展示了一种更友好的方法。
发布于 2018-04-25 22:24:43
在Kotlin,您可以使用removeIf{ predicate }
。这是使用Iterator
的速记。全文声明:
listAccounts.removeIf{ it == account.id }
有关解释,请参见遍历集合,在循环中删除对象时避免使用ConcurrentModificationException
Update:Kotlin-stdlib引入了removeAll { predicate }
,正如Aguragorn在他的回答中所指出的那样,它同样可以用于运行时环境中不存在的removeIf
(即Java1.6或Android级别24)。
发布于 2018-11-22 17:15:48
with(listAccounts.iterator()) {
forEach {
if (it.id == someObj.id) {
// do some stuff with it
oldSubscription = it
remove()
}
}
}
与SeekDaSky相同的解,但更多的Kotlin'y
https://stackoverflow.com/questions/50032000
复制相似问题