Change null handling in compareValuesBy(a, b, functions). Provide nullsFirst() and nullsLast() to extend Comparator<T> to Comparator<T?>.
This commit is contained in:
@@ -34,12 +34,21 @@ class OrderingTest {
|
||||
assertTrue(diff == 0)
|
||||
}
|
||||
|
||||
Test fun compareNullables() {
|
||||
val v1: Item? = this.v1
|
||||
val v2: Item? = null
|
||||
val diff = compareValuesBy(v1, v2) { it?.rating }
|
||||
assertTrue(diff > 0)
|
||||
val diff2 = compareBy<Item> { it.rating }.thenBy { it.name }.nullsLast().compare(v1, v2)
|
||||
assertTrue(diff2 < 0)
|
||||
}
|
||||
|
||||
Test fun sortComparatorThenComparator() {
|
||||
val comparator = comparator<Item> { a, b -> a.name.compareTo(b.name) } thenComparator { a, b -> a.rating.compareTo(b.rating) }
|
||||
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff > 0)
|
||||
val items = arrayListOf(v1, v2).sortBy(comparator)
|
||||
val items = arrayListOf(v1, v2).sortedWith(comparator)
|
||||
assertEquals(v2, items[0])
|
||||
assertEquals(v1, items[1])
|
||||
}
|
||||
@@ -49,7 +58,7 @@ class OrderingTest {
|
||||
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff < 0)
|
||||
val items = arrayListOf(v1, v2).sortBy(comparator)
|
||||
val items = arrayListOf(v1, v2).sortedWith(comparator)
|
||||
assertEquals(v1, items[0])
|
||||
assertEquals(v2, items[1])
|
||||
}
|
||||
@@ -59,7 +68,7 @@ class OrderingTest {
|
||||
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff < 0)
|
||||
val items = arrayListOf(v1, v2).sortBy(comparator)
|
||||
val items = arrayListOf(v1, v2).sortedWith(comparator)
|
||||
assertEquals(v1, items[0])
|
||||
assertEquals(v2, items[1])
|
||||
}
|
||||
@@ -68,7 +77,7 @@ class OrderingTest {
|
||||
val comparator = compareBy<Item>({ it.name }, { it.rating })
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff > 0)
|
||||
val items = arrayListOf(v1, v2).sortBy(comparator)
|
||||
val items = arrayListOf(v1, v2).sortedWith(comparator)
|
||||
assertEquals(v2, items[0])
|
||||
assertEquals(v1, items[1])
|
||||
}
|
||||
@@ -85,7 +94,7 @@ class OrderingTest {
|
||||
}
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff > 0)
|
||||
val items = arrayListOf(v1, v2).sortBy(comparator)
|
||||
val items = arrayListOf(v1, v2).sortedWith(comparator)
|
||||
assertEquals(v2, items[0])
|
||||
assertEquals(v1, items[1])
|
||||
}
|
||||
|
||||
@@ -827,9 +827,9 @@ class ArraysTest {
|
||||
test fun sortedNullableBy() {
|
||||
fun String.nullIfEmpty() = if (isEmpty()) null else this
|
||||
arrayOf(null, "").let {
|
||||
expect(listOf(null, "")) { it.sortedBy { it.orEmpty()}}
|
||||
expect(listOf("", null)) { it.sortedByDescending { it.orEmpty() }}
|
||||
expect(listOf("", null)) { it.sortedByDescending { it?.nullIfEmpty() }}
|
||||
expect(listOf(null, "")) { it.sortedWith(compareBy<String> { it }.nullsFirst()) }
|
||||
expect(listOf("", null)) { it.sortedWith(compareByDescending<String> { it }.nullsLast()) }
|
||||
expect(listOf("", null)) { it.sortedWith(compareByDescending<String> { it.nullIfEmpty() }.nullsLast() ) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -573,9 +573,12 @@ class CollectionTest {
|
||||
test fun sortedNullableBy() {
|
||||
fun String.nullIfEmpty() = if (isEmpty()) null else this
|
||||
listOf(null, "").let {
|
||||
expect(listOf(null, "")) { it.sortedBy { it.orEmpty()}}
|
||||
expect(listOf("", null)) { it.sortedByDescending { it.orEmpty() }}
|
||||
expect(listOf("", null)) { it.sortedByDescending { it?.nullIfEmpty() }}
|
||||
// expect(listOf(null, "")) { it.sortedBy { it.orEmpty()}}
|
||||
// expect(listOf("", null)) { it.sortedByDescending { it.orEmpty() }}
|
||||
// expect(listOf("", null)) { it.sortedByDescending { it?.nullIfEmpty() }}
|
||||
expect(listOf(null, "")) { it.sortedWith(compareBy<String> { it }.nullsFirst()) }
|
||||
expect(listOf("", null)) { it.sortedWith(compareByDescending<String> { it }.nullsLast()) }
|
||||
expect(listOf("", null)) { it.sortedWith(compareByDescending<String> { it.nullIfEmpty() }.nullsLast() ) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user