我有val myHashMap = HashMap<String, MutableList<TestItem>>()
,hashmap键值的日期格式为字符串,例如20-06-2018
,如何按降序对该hashMap进行排序?
预期结果:
22-06-2018 : []
21-06-2018 : []
20-06-2018 : []
我使用以下代码对其进行排序,但结果按升序排列:
val sortedMap = myHashMap.toSortedMap(compareBy { it })
答案 0 :(得分:3)
您可以使用compareByDescending
:
val sortedMap = myHashMap.toSortedMap(compareByDescending { it })
答案 1 :(得分:2)
按升序获得结果的原因是因为(从您提供的值中)所有日期的月份都为month = 6和year = 2018。
如果日期不同,那么只需执行compareByDescending
,结果将是错误的。
考虑以下日期:
21-05-2018,22-4-2018。
如果按降序排列,将获得2018年1月22日的成绩!
您需要做的是将日期转换为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这样的日期将给出错误的结果。
最后编辑:在串联中不需要-
。
答案 2 :(得分:0)
这对我有用。
val sortedMap = myHashMap.toSortedMap(reverseOrder());
参考:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/reverse-order.html。