diff --git a/js/js.libraries/src/core/javautil.kt b/js/js.libraries/src/core/javautil.kt index 3bd4ae1838b..d70f53b79c2 100644 --- a/js/js.libraries/src/core/javautil.kt +++ b/js/js.libraries/src/core/javautil.kt @@ -11,6 +11,10 @@ public interface Comparator { public fun compare(obj1: T, obj2: T): Int; } +public inline fun Comparator(crossinline comparison: (T, T) -> Int): Comparator = object : Comparator { + override fun compare(obj1: T, obj2: T): Int = comparison(obj1, obj2) +} + @library public abstract class AbstractCollection() : MutableCollection { override fun isEmpty(): Boolean = noImpl diff --git a/libraries/stdlib/src/kotlin/util/Ordering.kt b/libraries/stdlib/src/kotlin/util/Ordering.kt index 855a22b16c5..e153bac010d 100644 --- a/libraries/stdlib/src/kotlin/util/Ordering.kt +++ b/libraries/stdlib/src/kotlin/util/Ordering.kt @@ -182,15 +182,6 @@ inline public fun Comparator.thenByDescending(comparator: Comparator comparator(crossinline comparison: (T, T) -> Int): Comparator { - return object : Comparator { - public override fun compare(a: T, b: T): Int = comparison(a, b) - } -} - /** * Creates a comparator using the primary comparator and function to calculate a result of comparison. */ diff --git a/libraries/stdlib/src/kotlin/util/OrderingDeprecated.kt b/libraries/stdlib/src/kotlin/util/OrderingDeprecated.kt index 3e9c62fa198..d57ad39cbf3 100644 --- a/libraries/stdlib/src/kotlin/util/OrderingDeprecated.kt +++ b/libraries/stdlib/src/kotlin/util/OrderingDeprecated.kt @@ -194,16 +194,11 @@ inline public fun Comparator.thenByDescending(comparator: Comparator comparator(crossinline comparison: (T, T) -> Int): Comparator { - return object : Comparator { - public override fun compare(a: T, b: T): Int = comparison(a, b) - } -} +@Deprecated("Use Comparator SAM-constructor instead.", ReplaceWith("Comparator(comparison)", "java.util.Comparator")) +inline public fun comparator(crossinline comparison: (T, T) -> Int) = Comparator { a, b -> comparison(a, b) } /** * Creates a comparator using the primary comparator and function to calculate a result of comparison. diff --git a/libraries/stdlib/test/OrderingTest.kt b/libraries/stdlib/test/OrderingTest.kt index 4e769c0e33a..7d52494d8bf 100644 --- a/libraries/stdlib/test/OrderingTest.kt +++ b/libraries/stdlib/test/OrderingTest.kt @@ -53,7 +53,7 @@ class OrderingTest { @Test fun sortComparatorThenComparator() { - val comparator = comparator { a, b -> a.name.compareTo(b.name) }.thenComparator { a, b -> a.rating.compareTo(b.rating) } + val comparator = Comparator { a, b -> a.name.compareTo(b.name) }.thenComparator { a, b -> a.rating.compareTo(b.rating) } val diff = comparator.compare(v1, v2) assertTrue(diff > 0) diff --git a/libraries/stdlib/test/js/javautilCollectionsTest.kt b/libraries/stdlib/test/js/javautilCollectionsTest.kt index 1857491f252..f6f1019475d 100644 --- a/libraries/stdlib/test/js/javautilCollectionsTest.kt +++ b/libraries/stdlib/test/js/javautilCollectionsTest.kt @@ -1,7 +1,6 @@ package test.collections -import java.util.Collections -import java.util.ArrayList +import java.util.* import kotlin.test.* import org.junit.Test as test @@ -13,7 +12,7 @@ class JavautilCollectionsTest { val TEST_LIST = arrayOf(2, 0, 9, 7, 1).toList() val SORTED_TEST_LIST = arrayOf(0, 1, 2, 7, 9).toList() val MAX_ELEMENT = 9 - val COMPARATOR = comparator { x: Int, y: Int -> if (x > y) 1 else if (x < y) -1 else 0 } + val COMPARATOR = Comparator { x: Int, y: Int -> if (x > y) 1 else if (x < y) -1 else 0 } @test fun maxWithComparator() { assertEquals(MAX_ELEMENT, Collections.max(TEST_LIST, COMPARATOR))