带比较器的 SortBy 嵌套不可比较对象

SortBy nested non-comparable object with comparator

假设我有

data class NonComparable(val a : Any) //i.e. does not implement Comparable
data class WrappingElement(val nc : NonComparable)
val unordered = listOf<NonComparable>(....)
val comparator = Comparator<NonComparable>(){...}

使用比较器进行无序排序的最简洁(代码行最少)的方法是什么?

换句话说:如何重用比较器中的逻辑(对于 NonComparable)来对 WrappingElements 列表进行排序?

假设您有一个自定义 Comparator,您想要重复使用,如下所示:

object NonComparableComparator: Comparator<NonComparable> {
    override fun compare(p0: NonComparable, p1: NonComparable): Int {
        // your custom comparision logic here ...
    }
}

val comparator = NonComparableComparator

没有什么可以阻止您 re-use 在包装元素的比较器中使用此比较器。

val wrappingElementComparator = Comparator<WrappingElement> {
        p0, p1 -> comparator.compare(p0.nonComparable, p1.nonComparable)
}

val sortedList = unsortedList.sortedWith(wrappingElementComparator)

以上所有代码均基于以下内容:

data class NonComparable(val value: Any?)
data class WrappingElement(val nonComparable: NonComparable)

val unsortedList = listOf(
    WrappingElement(NonComparable(3)),
    WrappingElement(NonComparable(2)),
    WrappingElement(NonComparable(4)),
    WrappingElement(NonComparable(5)),
    WrappingElement(NonComparable(0)),
    WrappingElement(NonComparable(1)),
)