You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:18:34