Kotlin按降序排序哈希图

时间:2018-06-25 10:42:30

标签: kotlin hashmap

我有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 })

3 个答案:

答案 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