有没有一种简单的方法可以按值和键(Kotlin)对 HashMap 进行排序?

时间:2021-06-09 09:54:17

标签: sorting kotlin hashmap

我知道默认情况下不会对哈希图进行排序。我还知道您可以使用 map.toSortedMap() 轻松对 HashMap 的键进行排序,并使用 map.toList().sortedBy { (_, value) -> value } 对它们的值进行排序。

但是如果您想对两者进行排序怎么办?我想首先按值对哈希图进行排序,然后,如果值相似,则按键排序。我主要看到了在 Java 中完成此操作的示例,但代码可能非常广泛。有没有一种简单、直观的方式来做我想做的事?

编辑:更精确一点:我想按值对哈希图对象进行排序,但如果某些值相似,我也只想按键对这些对象进行排序。

1 个答案:

答案 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 代表地图中的 keyit.second 代表值。您可以更改该逻辑以按您喜欢的方式对其进行排序。

另外,.toMap() 不会给你 HashMap,而是 Map,你可以通过做类似 HashMap(map) 的事情来取回它,但话又说回来,这整个过程对我来说似乎效率不高。

相关问题