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

如何在Kotlin中根据ID获取列表里的最新时间戳项?

获取每个ID对应的最新Timestamp项(Kotlin实现)

给定数据类:

data class Test(val id: Int, val timeStamp: Long)

以及升序排列的数据集:

val data = listOf(
    Test(1, 100),
    Test(1, 150),
    Test(2, 50),
    Test(2, 150),
    Test(2, 300),
)

要得到每个ID对应timeStamp最大的项,这里提供几种实用的实现方式:

方法一:利用groupBy(符合你的初始思路)

因为列表是升序排列的,同一ID的所有项中,最后一个就是timeStamp最大的。所以可以先按ID分组,再取每个分组的最后一项:

val result = data.groupBy { it.id }
    .mapValues { (_, group) -> group.last() }
    .values.toList()

如果不确定列表是否严格按timeStamp升序,也可以用maxByOrNull明确找出timeStamp最大的项:

val result = data.groupBy { it.id }
    .values
    .map { group -> group.maxByOrNull { it.timeStamp }!! }

方法二:利用列表升序特性,一次遍历完成(更高效)

因为列表是升序的,后面出现的同ID项timeStamp一定更大,所以可以用fold遍历一次,用Map记录每个ID的最新项:

val result = data.fold(mutableMapOf<Int, Test>()) { map, test ->
    map[test.id] = test // 后续同ID项会覆盖之前的,最终保留最大timeStamp的项
    map
}.values.toList()

这种方法时间复杂度为O(n),不需要额外的分组操作,效率更高。

最终两种方法都能得到预期输出:

listOf(
    Test(1, 150),
    Test(2, 300),
)

内容的提问来源于stack exchange,提问作者sonrohancue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:45:12