Kotlin允许我使用多个比较字段对ASC和数组进行排序 .
例如:
return ArrayList(originalItems) .sortedWith(compareBy({ it.localHits }, { it.title }))
但是当我尝试排序DESC( compareByDescending() )时,它不允许我使用多个比较字段 .
compareByDescending()
有什么办法可以吗?
你也可以使用sort ASC然后反转它:
return ArrayList(originalItems).sortedWith(compareBy({ it.localHits }, { it.title })).asReversed()
asReversed() 的实现是具有反向索引的排序列表的视图,并且具有比使用 reverse() 更好的性能
asReversed()
reverse()
反转比较器也有效:
originalItems.sortedWith(compareBy<Item>({ it.localHits }, { it.title }).reversed())
ArrayList(originalItems) .sortedWith(compareByDescending({ it.localHits }, { it.title }))
您只需要定义此功能:
fun <T> compareByDescending(vararg selectors: (T) -> Comparable<*>?): Comparator<T> { return Comparator { b, a -> compareValuesBy(a, b, *selectors) } }
或者您可以直接使用 Comparator :
Comparator
ArrayList(originalItems) .sortedWith(Comparator { b, a -> compareValuesBy(a, b, { it.localHits }, { it.title }) })
您可以使用 thenByDescending() (或升序为 thenBy() )扩展函数来定义辅助 Comparator .
thenByDescending()
thenBy()
假设 originalItems 是 SomeCustomObject ,这样的事情应该有效:
originalItems
SomeCustomObject
return ArrayList(originalItems) .sortedWith(compareByDescending<SomeCustomObject> { it.localHits } .thenByDescending { it.title })
(当然你必须用你自己的通用类型替换 SomeCustomObject )
4 回答
你也可以使用sort ASC然后反转它:
asReversed()
的实现是具有反向索引的排序列表的视图,并且具有比使用reverse()
更好的性能反转比较器也有效:
您只需要定义此功能:
或者您可以直接使用
Comparator
:您可以使用
thenByDescending()
(或升序为thenBy()
)扩展函数来定义辅助Comparator
.假设
originalItems
是SomeCustomObject
,这样的事情应该有效:(当然你必须用你自己的通用类型替换
SomeCustomObject
)