我正在使用sortedBy()
对对象集合进行排序。
由于顺序可能会根据用户的选择而变化,因此我最终得到了以下代码
val sortedList = if (sortingOrder == WordSortingOrder.BY_ALPHA) {
list.sortedBy { it.word.value }
} else {
list.sortedBy { it.createdAt }
}
Run Code Online (Sandbox Code Playgroud)
然后我对排序后的集合执行进一步的操作。我意识到该sortedBy()
方法需要返回一个属性。我想知道是否有一种方法可以将排序条件嵌入到一个收集方法链中。
如果你的属性是不同类型的,你将无法选择基于一些条件,作为结果他们中的一个sortedBy
,因为他们共同的超类型将被推断为Any
,这是不是一个亚型Comparable<R>
的sortedBy
预期。
相反,您可以使用sortedWith
方法,该方法采用Comparator
,并根据条件提供比较器:
list.sortedWith(
if (sortingOrder == WordSortingOrder.BY_ALPHA)
compareBy { it.word.value }
else
compareBy { it.createdAt }
)
Run Code Online (Sandbox Code Playgroud)
此处使用该kotlin.comparisons.compareBy
函数创建了不同属性的比较器。
然后,您可以提取基于排序顺序选择比较器的逻辑到函数:
list.sortedWith(comparatorFor(sortingOrder))
fun comparatorFor(sortingOrder: WordSortingOrder): Comparator<MyType> = ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1512 次 |
最近记录: |