diff --git a/libraries/stdlib/src/kotlin/collections/Maps.kt b/libraries/stdlib/src/kotlin/collections/Maps.kt index a304080b973..780b6e76ed1 100644 --- a/libraries/stdlib/src/kotlin/collections/Maps.kt +++ b/libraries/stdlib/src/kotlin/collections/Maps.kt @@ -43,7 +43,7 @@ public fun emptyMap(): Map = @Suppress("UNCHECKED_CAST") (EmptyMap * * @sample samples.collections.Maps.Instantiation.mapFromPairs */ -public fun mapOf(vararg pairs: Pair): Map = if (pairs.size > 0) linkedMapOf(*pairs) else emptyMap() +public fun mapOf(vararg pairs: Pair): Map = if (pairs.size > 0) pairs.toMap(LinkedHashMap(mapCapacity(pairs.size))) else emptyMap() /** * Returns an empty read-only map. @@ -123,7 +123,7 @@ public inline fun linkedMapOf(): LinkedHashMap = LinkedHashMap linkedMapOf(vararg pairs: Pair): LinkedHashMap - = LinkedHashMap(mapCapacity(pairs.size)).apply { putAll(pairs) } + = pairs.toMap(LinkedHashMap(mapCapacity(pairs.size))) /** * Calculate the initial capacity of a map, based on Guava's com.google.common.collect.Maps approach. This is equivalent diff --git a/libraries/stdlib/src/kotlin/comparisons/Comparisons.kt b/libraries/stdlib/src/kotlin/comparisons/Comparisons.kt index d44974678a9..867ba6f557b 100644 --- a/libraries/stdlib/src/kotlin/comparisons/Comparisons.kt +++ b/libraries/stdlib/src/kotlin/comparisons/Comparisons.kt @@ -26,6 +26,10 @@ package kotlin.comparisons */ public fun compareValuesBy(a: T, b: T, vararg selectors: (T) -> Comparable<*>?): Int { require(selectors.size > 0) + return compareValuesByImpl(a, b, selectors) +} + +private fun compareValuesByImpl(a: T, b: T, selectors: ArrayComparable<*>?>): Int { for (fn in selectors) { val v1 = fn(a) val v2 = fn(b) @@ -84,8 +88,9 @@ public fun > compareValues(a: T?, b: T?): Int { * compare as equal, the result of that comparison is returned from the [Comparator]. */ public fun compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator { + require(selectors.size > 0) return object : Comparator { - public override fun compare(a: T, b: T): Int = compareValuesBy(a, b, *selectors) + public override fun compare(a: T, b: T): Int = compareValuesByImpl(a, b, selectors) } }