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

Kotlin中如何按对象timestamp属性降序排序对象Map?

Kotlin按自定义对象属性排序Map

toSortedMap()是针对Map的键排序的API,没法直接用它按值的属性排序。要实现按Image的timestamp排序,得先把Map转成条目列表,排序后再转成有序Map(比如LinkedHashMap)来保留顺序。

按timestamp降序排序(对应a→b→c的顺序)

如果要按timestamp从大到小排序,代码如下:

data class Image(val timestamp: Long)

fun main() {
    val map = mutableMapOf<String, Image>()
    map["a"] = Image(999)
    map["b"] = Image(555)
    map["c"] = Image(333)

    // 按timestamp降序排序,转成LinkedHashMap保证顺序
    val sortedDescMap = map.entries
        .sortedByDescending { it.value.timestamp }
        .associateBy({ it.key }, { it.value }) as LinkedHashMap<String, Image>

    // 输出结果:a、b、c
    sortedDescMap.keys.forEach(::println)
}

按timestamp升序排序(对应c→b→a的顺序)

你提到期望排序后顺序是c、b、a,这其实是按timestamp从小到大(升序)排序,只需要把sortedByDescending换成sortedBy:

val sortedAscMap = map.entries
    .sortedBy { it.value.timestamp }
    .associateBy({ it.key }, { it.value }) as LinkedHashMap<String, Image>

// 输出结果:c、b、a
sortedAscMap.keys.forEach(::println)

额外提示

  • 如果只是需要遍历排序后的条目,不需要转成Map的话,直接操作排序后的列表更高效:
    map.entries.sortedBy { it.value.timestamp }.forEach {
        println("${it.key}: ${it.value.timestamp}")
    }
    
  • associateBy默认返回普通HashMap,不保证顺序,所以必须强转成LinkedHashMap才能保留排序后的条目顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:05:20