Чтобы обновить список элементами из другого, вы можете использовать несколько способов.
Сначала начните с прямой замены (которая сохраняет порядок, но это только деталь):
val sourceList = TODO()
val targetList = TODO()
targetList.replaceAll { targetItem ->
sourceList.firstOrNull { targetItem.id == it.id }
?: targetItem
}
В качестве альтернативы можно удалить все элементы и добавить их снова:
targetList.removeIf { targetItem ->
sourceList.any { it.id == targetItem.id }
}
targetList.addAll(sourceList)
Использование listIterator (обратите внимание! Это на самом деле также происходит, когда вы вызываете replaceAll
... не таким же образом, нопохоже; -)):
val iterator = targetList.listIterator()
while (iterator.hasNext()) {
iterator.next().apply {
sourceList.firstOrNull { id == it.id }?.also(iterator::set)
}
}
Наверное, не так читабельно ... Для вашего forEachIndexed
Я не вижу ни одного варианта использования.Для других проблем определенно есть, но я бы посоветовал вам стараться опускать индексы (а также forEach
) так часто, как вы можете.Если вам ничего не приходит в голову, то forEach
тоже хорошо, но часто 1011 * (а тем более forEachIndexed
) не лучший подход для решения проблемы.