Ответ 1
Вы можете использовать эти функции из пакета kotlin.comparisons
:
-
fun <T: Comparable<T>> nullsLast(): Comparator<T?>
, который строит компаратор чего-то сравнимого, который просто ставитnull
после всех непустых значений; -
fun <T, K> compareBy(comparator: Comparator<in K>, selector: (T) -> K): Comparator<T>
, который принимает компаратор и функцию, которая предоставляет значения для компаратора, объединяя их в новый компаратор;
Это позволит вам сделать компаратор, который сравнивает SomeObject
с nullableField
, помещая null
last. Затем вы можете просто передать компаратор в fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T>
, который сортирует итерабельность в списке с помощью компаратора:
val l = listOf(SomeObject(null), SomeObject("a"))
l.sortedWith(compareBy(nullsLast<String>()) { it.nullableField }))
// [SomeObject(nullableField=a), SomeObject(nullableField=null)]