【问题标题】:Kotlin sort hashmap in descending orderKotlin 对 hashmap 进行降序排序
【发布时间】:2018-06-25 10:42:29
【问题描述】:

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

【问题讨论】:

  • 您的预期结果似乎也是降序排列的?此外,您在那里的toSortedMap 电话非常适合我,我按升序(20、21、22)获取元素。
  • 我的错误,更新问题

标签: kotlin hashmap


【解决方案1】:

你可以使用compareByDescending:

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

【讨论】:

  • 谢谢! Kotlin 很棒
  • 确实,标准库中几乎所有内容都已存在 :)
【解决方案2】:

这对我有用。

val sortedMap = myHashMap.toSortedMap(reverseOrder())

参考:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/reverse-order.html

【讨论】:

    【解决方案3】:

    您按升序获得结果的原因是(根据您提供的值)所有日期的月 = 6 和年 = 2018。
    如果有不同的日期,那么如果您只是简单地执行compareByDescending,结果将是错误的。
    考虑以下日期: 2018 年 5 月 21 日,2018 年 4 月 22 日。
    如果您按降序排序,您将获得 1st 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 这样的日期会给出错误的结果。
    上次编辑:连接中不需要-

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多