Я хотел бы хранить такую информацию, как rowid (ключ) и orderId (значение) в MutableMap. Затем выполните итерацию по MutableMap и получите ключ и значение текущего элемента, а также ключ и значение следующего элемента. Причина этого в том, что, когда я перебираю карту, я меняю значение первого элемента, используя значение второго элемента, или я изменяю значение второго значения элемента, используя значение первого элемента.
Пример:
val mutableMap: MutableMap<Int, Int> = mutableMapOf<Int, Int>()
mutableMap[350] = 0
mutableMap[351] = 1
mutableMap[352] = 2
mutableMap[353] = 3
mutableMap.put(354, 4)
mutableMap.put(355, 5)
mutableMap.put(356, 6)
for (key in mutableMap.keys) {
Log.d("print data", "print data, Key = ${key}, Value = ${mutableMap[key]}")
}
Как получить этот предмет: myLinkedHashMap[450] = 0 и этот элемент myLinkedHashMap[453] = 3 информации одновременно, поэтому я могу поменять местами значения между ними?
Какую коллекцию я должен использовать для достижения своей цели и как?
Думаю, вам подойдет SortedMap: kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/…
@EugeneKrivenja mutableMapOf
гарантированно будет заказан на основании его документов. В настоящее время он возвращает LinkedHashMap.
Хотя интерфейсы Map и MutableMap не претендуют на упорядоченность, конкретная реализация, используемая mutableMapOf
, все равно упорядочена. Это гарантировано, потому что это объявлено в документации функции. Поэтому, если вы работаете с MutableMap, который вы объявили локально с помощью mutableMapOf
, то вы знаете, что он упорядочен. Если вы работаете с MutableMap, который был передан вам из какого-то другого класса, вы не можете быть уверены, что он упорядочен. Но это должно быть довольно редким явлением, поскольку передача изменяемых коллекций между классами является плохой инкапсуляцией.
Чтобы повторить карту, упорядоченную парами, вы можете использовать zipWithNext
на клавишах. Этот вызов создает копию списка ключей, поэтому вы можете безопасно изменять карту внутри цикла. Это похоже на движущееся окно пар — каждый элемент, кроме первого и последнего, появится в двух разных парах, один раз как второй элемент, а затем один раз как первый элемент.
for ((keyA, keyB) in mutableMap.keys.zipWithNext()) {
}
Если вы хотите повторять эксклюзивные пары, вы можете использовать chunked(2)
вместо zipWithNext()
, но вам нужно быть уверенным, что вы разбиваете только четное количество элементов:
for ((keyA, keyB) in mutableMap.keys.take(mutableMap.size - mutableMap.size % 2).chunked(2)) {
}
// or
for (keys in mutableMap.keys.chunked(2)) {
if (keys.size == 1) continue
val (keyA, keyB) = keys
}
Map.keys установлены, значит не заказаны. Какой следующий пункт в этом случае для вас? stackoverflow.com/a/44595686/5479247