Kotlin按降序排列哈希映射。

18

我有一个哈希表 val myHashMap = HashMap<String, MutableList<TestItem>>(),哈希表的键值是格式化后的日期字符串,例如 20-06-2018。如何按降序排序这个哈希表?

期望结果:

22-06-2018 : []
21-06-2018 : []
20-06-2018 : []

我使用这段代码进行排序,但结果是升序的:

val sortedMap = myHashMap.toSortedMap(compareBy { it })

你期望的结果似乎也是降序?此外,你所使用的 toSortedMap 方法在我的环境下运行得很完美,并按升序排列元素(20、21、22)。 - zsmb13
1
我的错误,更新的问题 - LeTadas
3个回答

32

您可以使用compareByDescending

val sortedMap = myHashMap.toSortedMap(compareByDescending { it })

2
谢谢!Kotlin真棒。 - LeTadas
实际上,标准库中已经有几乎所有的东西了 :) - zsmb13

3

2
你之所以得到升序的结果,是因为(从你提供的值来看)所有日期的月份都是6,年份都是2018。
如果有不同的日期,则仅使用compareByDescending会得到错误的结果。
考虑以下日期:21-05-2018,22-4-2018。
如果你按降序排序,你将得到第一个日期是22-04-2018!
你需要做的是将日期转换为yyyy-MM-dd格式,然后按降序排序:
fun convertDate(d: String): String {
    val array = d.split("-")
    return array[2] + array[1] + array[0]
}

val sortedMap =  myHashMap.toSortedMap(compareByDescending { convertDate(it) })

还有一件事:您的日期必须具有2位数的月份和日期以及4位数的年份,例如2-5-2018这样的日期将会得到错误的结果。
最后编辑:在连接中不需要使用-


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接