如何通过两个属性和排序规则对对象列表进行排序

时间:2018-09-11 20:59:37

标签: kotlin functional-programming

我必须按lastName和firstName对对象列表进行排序(如果多个对象存在相同的lastName)。我还必须对这些应用Collat​​or。

假设我可以对一个属性执行此操作

val collator = Collator.getInstance(context.getResources().getConfiguration().locale)

myList.sortedWith(compareBy(collator, { it.lastName.toLowerCase() }))

但是是否可以将另一个限制也应用于按firstName排序?

2 个答案:

答案 0 :(得分:3)

您可以使用arr.reduce() - left-to-right添加其他排序条件:

thenBy

答案 1 :(得分:1)

最简单的方法是将选择器lambda中的两个属性串联起来:

myList.sortedWith(
    compareBy(collator) { "${it.lastName} ${it.firstName}".toLowerCase() }
)