Удивительно, что никто не предложил это, но:
import java.util.UUID
UUID.randomUUID().toString();
Легко.
Преимущество этого в том, что UUID являются хорошими и длинными и гарантированно почти невозможно столкнуться.
Википедия имеет хорошее объяснение:
«... только после генерации 1 миллиарда UUID каждую секунду в течение следующих 100 лет вероятность создания всего одного дубликата будет около 50%».
http: // ru.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates
Первые 4 бита - это тип версии и 2 для варианта, так что вы получаете 122 бит случайных значений. Поэтому, если вы хотите , вы можете обрезать с конца, чтобы уменьшить размер UUID. Это не рекомендуется, но у вас все еще есть множество случайностей, достаточно для ваших записей 500k.
Ну, я обнаружил, что проблема заключалась в том, что я копировал исходное содержимое таким образом, чтобы не делать фактическое копирование содержимого, а делать ссылки. Поэтому я исправил проблему, скопировав содержимое элемента в новый экземпляр itemModel. После этого diff util способен дифференцировать должным образом.
Вместо этого,
private fun updateItem(item: ItemModel, status: Status) {
......................................................
for ((index, el) in currentItems.withIndex()) {
if (el.id == item.id) {
val currentItem = currentItems.removeAt(index)
currentItem.status = status
currentItems.add(index, currentItem)
break
}
}
itemModels.value = currentItems
......................................
}
Я сделал это,
private fun updateItem(item: ItemModel, status: Status) {
...............
if (el.id == item.id) {
currentItems.removeAt(index)
val currentItem = ItemModel(item.id, "${item.title}, ${status.progress}")
currentItem.status = status
currentItems.add(index, currentItem)
break
}
...........
}