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

Kotlin中如何按动态时长区间对Route对象列表分组?

按动态时间区间分组Route列表的Kotlin实现

嘿,作为Kotlin新手碰到这个分组需求太正常了,其实用Kotlin标准库的groupBy就能轻松搞定,核心是给每个Route生成对应的区间键就行,我给你一步步拆解:

第一步:定义Route数据类

首先确保你的Route类属性是只读的(用val),这是Kotlin data class的最佳实践:

data class Route(val duration: Int)

第二步:编写区间计算函数

我们需要一个函数,输入duration,返回它所属的区间(比如5→0..9,31→30..39)。如果要支持动态调整区间大小,还可以把区间长度作为参数:

// 默认按10为区间间隔,也可以传入自定义值
fun getDurationInterval(duration: Int, intervalSize: Int = 10): IntRange {
    // 计算区间的起始值:比如31/10=3,3*10=30
    val intervalStart = duration / intervalSize * intervalSize
    // 区间结束值是起始值+间隔-1,比如30+10-1=39
    return intervalStart..intervalStart + intervalSize - 1
}

这个函数的逻辑很直观:用整数除法找到当前duration所在区间的起始点,再算出对应的结束点,返回一个IntRange作为分组键。

第三步:用groupBy完成分组

有了区间计算函数,直接调用groupBy,把每个Route映射到对应的区间即可:

fun main() {
    val routes = listOf(Route(5), Route(7), Route(31))
    // 按默认10为间隔分组
    val groupedRoutes = routes.groupBy { getDurationInterval(it.duration) }
    
    // 打印结果验证
    println(groupedRoutes)
    // 输出:{0..9=[Route(duration=5), Route(duration=7)], 30..39=[Route(duration=31)]}
}

动态调整区间的例子

如果想要改成按20为间隔分组,只需要传入第二个参数:

val groupedBy20 = routes.groupBy { getDurationInterval(it.duration, 20) }
// 此时31会被分到20..39区间

本质上,groupBy的强大之处就在于键选择器函数的灵活性——你可以根据任何动态逻辑生成分组键,不管是固定间隔还是更复杂的规则,只要在函数里实现对应的映射就行。

内容的提问来源于stack exchange,提问作者Yonatan Karp-Rudin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:42:46