Change getOrElse and getOrPut implementations so that double lookup is made when map doesn't contain value, rather when does.
This commit is contained in:
@@ -145,10 +145,11 @@ public fun <K, V> Map.Entry<K, V>.toPair(): Pair<K, V> {
|
|||||||
* @sample test.collections.MapTest.getOrElse
|
* @sample test.collections.MapTest.getOrElse
|
||||||
*/
|
*/
|
||||||
public inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V {
|
public inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V {
|
||||||
if (containsKey(key)) {
|
val value = get(key)
|
||||||
return get(key) as V
|
if (value == null && !containsKey(key)) {
|
||||||
} else {
|
|
||||||
return defaultValue()
|
return defaultValue()
|
||||||
|
} else {
|
||||||
|
return value as V
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,12 +160,13 @@ public inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V {
|
|||||||
* @sample test.collections.MapTest.getOrPut
|
* @sample test.collections.MapTest.getOrPut
|
||||||
*/
|
*/
|
||||||
public inline fun <K, V> MutableMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
|
public inline fun <K, V> MutableMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
|
||||||
if (containsKey(key)) {
|
val value = get(key)
|
||||||
return get(key) as V
|
if (value == null && !containsKey(key)) {
|
||||||
} else {
|
|
||||||
val answer = defaultValue()
|
val answer = defaultValue()
|
||||||
put(key, answer)
|
put(key, answer)
|
||||||
return answer
|
return answer
|
||||||
|
} else {
|
||||||
|
return value as V
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user