Kotlin中如何按Category和Subcategory对对象列表排序?
在Kotlin中实现多级排序的简便方式
当然有超简便的实现方式!Kotlin标准库的集合API已经帮我们封装好了这类多级排序的逻辑,完全不用手动写复杂的比较器。
首先,我们先定义你的数据类(假设你的对象是类似这样的结构):
data class YourObject(val category: String, val subcategory: String)
然后准备你的原始列表:
val originalList = listOf( YourObject("Category1","Subcategory1"), YourObject("Category2","SubcategoryA"), YourObject("Category1","Subcategory1"), YourObject("Category1","Subcategory2"), YourObject("Category2","SubcategoryB") )
核心的排序代码只需要一行:
val sortedList = originalList.sortedWith(compareBy(YourObject::category, YourObject::subcategory))
为什么这行代码能满足需求?
compareBy函数可以接受多个属性选择器,它会先按照第一个选择器(这里是category)排序;- 当两个对象的
category相同时,会自动使用第二个选择器(subcategory)继续排序,完美匹配你要的“先分类再子类排序”的逻辑。
运行这段代码后,sortedList的顺序就是你期望的:
YourObject(category=Category1, subcategory=Subcategory1)
YourObject(category=Category1, subcategory=Subcategory1)
YourObject(category=Category1, subcategory=Subcategory2)
YourObject(category=Category2, subcategory=SubcategoryA)
YourObject(category=Category2, subcategory=SubcategoryB)
如果之后需要调整排序规则(比如某一级要倒序),也可以很灵活地修改,比如给某个选择器加上倒序逻辑:
// 按category正序,subcategory倒序 val sortedListDesc = originalList.sortedWith(compareBy(YourObject::category) .thenByDescending(YourObject::subcategory))
是不是非常简洁直观?Kotlin的集合API就是这么贴心~
内容的提问来源于stack exchange,提问作者Romain Caron
相关产品推荐
相关产品推荐

