我知道默认情况下不会对哈希图进行排序。我还知道您可以使用 map.toSortedMap() 轻松对 HashMap 的键进行排序,并使用 map.toList().sortedBy { (_, value) -> value } 对它们的值进行排序。
但是如果您想对两者进行排序怎么办?我想首先按值对哈希图进行排序,然后,如果值相似,则按键排序。我主要看到了在 Java 中完成此操作的示例,但代码可能非常广泛。有没有一种简单、直观的方式来做我想做的事?
编辑:更精确一点:我想按值对哈希图对象进行排序,但如果某些值相似,我也只想按键对这些对象进行排序。
答案 0 :(得分:1)
我能想到的最简单的解决方案是将地图更改为成对列表,对其进行排序,然后再次使其成为地图。现在对此持保留态度,因为老实说,我认为这可能不是最好的方法。
它看起来像这样:
val m = hashMapOf<String, String>()
m.map { it.key to it.value }.sortedBy { it.first + it.second }.toMap()
排序逻辑为 it.first + it.second
,其中 it.first
代表地图中的 key
,it.second
代表值。您可以更改该逻辑以按您喜欢的方式对其进行排序。
另外,.toMap()
不会给你 HashMap
,而是 Map
,你可以通过做类似 HashMap(map)
的事情来取回它,但话又说回来,这整个过程对我来说似乎效率不高。