diff --git a/libraries/stdlib/src/kotlin/collections/Maps.kt b/libraries/stdlib/src/kotlin/collections/Maps.kt index b8024001b31..2a694cc2aea 100644 --- a/libraries/stdlib/src/kotlin/collections/Maps.kt +++ b/libraries/stdlib/src/kotlin/collections/Maps.kt @@ -145,10 +145,11 @@ public fun Map.Entry.toPair(): Pair { * @sample test.collections.MapTest.getOrElse */ public inline fun Map.getOrElse(key: K, defaultValue: () -> V): V { - if (containsKey(key)) { - return get(key) as V - } else { + val value = get(key) + if (value == null && !containsKey(key)) { return defaultValue() + } else { + return value as V } } @@ -159,12 +160,13 @@ public inline fun Map.getOrElse(key: K, defaultValue: () -> V): V { * @sample test.collections.MapTest.getOrPut */ public inline fun MutableMap.getOrPut(key: K, defaultValue: () -> V): V { - if (containsKey(key)) { - return get(key) as V - } else { + val value = get(key) + if (value == null && !containsKey(key)) { val answer = defaultValue() put(key, answer) return answer + } else { + return value as V } }