Как правильно изменить HashMap на SparseArray? - PullRequest
0 голосов
/ 16 января 2020

Я изменил:

private val map = HashMap<Int, AuthorizationContentView>()

на

private val map = SparseArray<AuthorizationContentView>()

Но как я могу исправить ситуацию здесь?

val view = map.getOrPut(position) {
    AuthorizationContentView(context = context)
}

1 Ответ

2 голосов
/ 16 января 2020

getOrPut - это функция расширения в MutableMap Вы можете сделать то же самое для SparseArray, также используя свою собственную функцию расширения. Вот как удобно Kotlin:)

/**
 * Returns the value for the given key. If the key is not found in the SparseArray,
 * calls the [defaultValue] function, puts its result into the array under the given key
 * and returns it.
 */
public inline fun <V> SparseArray<V>.getOrPut(key: Int, defaultValue: () -> V): V {
    val value = get(key)
    return if (value == null) {
        val answer = defaultValue()
        put(key, answer)
        answer
    } else {
        value
    }
}
...