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

Is there a simple way to sort a HashMap by values AND keys (Kotlin)?

我知道 hashmaps 没有默认排序。我也知道您可以使用 map.toSortedMap() 轻松地对 HashMap 的键进行排序,并使用 map.toList().sortedBy { (_, value) -> value }.

对它们的值进行排序

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

编辑:更精确一点:我想根据它们的值对 hashmap 对象进行排序,但是如果某些值相似,我也只想根据它们的键对这些对象进行排序。

我能想到的最简单的解决方案是将地图更改为成对的列表,对其进行排序,然后再次将其制成地图。现在对此持保留态度,因为老实说,我认为这可能不是最好的方法。

它将看起来像这样:

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) 之类的操作将其取回,但随后同样,整个过程对我来说似乎效率不高。