Как оптимизировать работу с HashMap в Kotlin? - PullRequest
1 голос
/ 07 апреля 2020

все. Сегодня я написал следующий код. Похоже, это работает, но мне интересно, это правильный способ делать то, что я хочу. У меня есть HashMap с прослушивателями в качестве ключей и логическим значением, которое определяет: прослушиватель уже получил последнее обновление. Это правильный способ сброса HashMap?

private val listenersUpdateState: HashMap<WeakReference<IStatusesListener>, Boolean> = HashMap()

private fun setAllListenersToReadyToUpdate() {
    listenersUpdateState.keys.forEach { key -> 
        listenersUpdateState[key] = false
    }
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вы можете использовать удобную функцию, такую ​​как Map.mapValues ​​()

Пример:

private val listenersUpdateState: MutableMap<WeakReference<IStatusesListener>, Boolean> = mutableMapOf()

private fun setAllListenersToReadyToUpdate() = listenersUpdateState.mapValues { false }

Это поможет не индексировать сопоставлять снова и снова с помощью ключевого слова map[key], которое ухудшит производительность!

РЕДАКТИРОВАТЬ:

Приведенный выше код работает для составления новой карты со всеми значениями, установленными в false но чтобы изменить все значения оригинальной карты, см. код ниже

private fun setAllListenersToReadyToUpdate() =
    listenersUpdateState.entries.onEach { it.setValue(false) }
0 голосов
/ 07 апреля 2020

Если вы нацеливаетесь на Java 8 или выше, вы можете использовать replaceAll:

listenersUpdateState.replaceAll { _, _ -> false }

В качестве альтернативы, вы можете просто вызвать clear() на карте, и когда вы получите значения, по умолчанию false, когда значение отсутствует:

fun isUpdated(someRef: WeakReference<IStatusesListener>) = listenersUpdateState[someRef] ?: false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...