Вы можете немного ускорить его, не используя forEach
, который использует интегратор и вместо этого использует цикл for. Вы также можете сломать, когда найдете id
, предполагая, что они уникальны
for (i in 0 until devicesList.size) {
val device = devicesList[i]
for (j in 0 until items.size) {
val item = items[j]
if (item.id == device.id) {
device.selected = true
break
}
}
}
Предполагая, что ваши id
уникальны, вы также можете сделать дубликат списка items
и отбросить те, которые были найдены, так что каждый цикл короче, как этот
val copy = items.toMutableList()
for (i in 0 until devicesList.size) {
val device = devicesList[i]
for (j in 0 until copy.size) {
val item = copy[j]
if (item.id == device.id) {
device.selected = true
copy.remove(item)
break
}
}
}
Вы могли бы также подумать о создании карты, где key
- это ваш id
, чтобы вам не пришлось зацикливаться, и вместо этого вы извлекали элемент напрямую с помощью id
. Вы должны взвесить стоимость создания карты в первую очередь.
val map = items.associateBy { it.id }
for (i in 0 until devicesList.size) {
val device = devicesList[i]
device.selected = map[device.id] != null
}
Кроме того, вам также следует переместить логику в фоновый поток и дождаться ее завершения.