gpt4 book ai didi

kotlin - 在 Kotlin 中使用条件选择排序属性

转载 作者:行者123 更新时间:2023-12-02 12:06:54 26 4
gpt4 key购买 nike

我正在使用 sortedBy()对对象集合进行排序。

由于顺序可能会根据用户的选择而变化,因此我最终得到了以下代码

val sortedList = if (sortingOrder == WordSortingOrder.BY_ALPHA) {
list.sortedBy { it.word.value }
} else {
list.sortedBy { it.createdAt }
}

然后我对排序后的集合执行进一步的操作。
我意识到 sortedBy()方法期望返回一个属性。
我想知道是否有一种方法可以将排序条件嵌入到一个收集方法链中。

最佳答案

如果您的属性是不同类型的,您将无法根据某些条件选择其中之一,结果 sortedBy ,因为它们的共同父类(super class)型将被推断为 Any它不是 Comparable<R> 的子类型如 sortedBy期待。

相反,您可以使用 sortedWith方法,它需要一个 Comparator ,并根据条件提供比较器:

list.sortedWith(
if (sortingOrder == WordSortingOrder.BY_ALPHA)
compareBy { it.word.value }
else
compareBy { it.createdAt }
)

此处使用 kotlin.comparisons.compareBy 创建不同属性的比较器功能。

然后,您可以提取基于排序顺序选择比较器的逻辑到函数:
list.sortedWith(comparatorFor(sortingOrder))

fun comparatorFor(sortingOrder: WordSortingOrder): Comparator<MyType> = ...

关于kotlin - 在 Kotlin 中使用条件选择排序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38829617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com