【问题标题】:Sort LinkedHashMap<String, Json> by value without losing keys按值排序 LinkedHashMap<String, Json> 而不会丢失键
【发布时间】:2020-05-11 20:13:21
【问题描述】:

我有这个改造响应体为 LinkedHashMap

"-M74DWOrW0w07BpfmBVo": {
  "noteContent": "Note 1 content",
  "noteCurrentTime": 1589225588206,
  "noteTitle": "Note 1"
},
"-M74Dc2dDAZgVk6q86Rs": {
  "noteContent": "Note 2 content",
  "noteCurrentTime": 1589225990674,
  "noteTitle": "Note 2"
},
"-M74DmbSNQnjEU0Hw4yQ": {
  "noteContent": "Note 3 content",
  "noteCurrentTime": 1589225658614,
  "noteTitle": "Note 3"
}
}

我需要按“noteCurrentTime”值排序。到目前为止,这就是获取排序值数组的方法。

private fun sortJsonArray(valuesArray: JSONArray): JSONArray? {
        val sortedValues: MutableList<JSONObject> = ArrayList()
        for (i in 0 until valuesArray.length()) {
            sortedValues.add(valuesArray.getJSONObject(i))
        }
        sortedValues.sortWith(Comparator { lhs, rhs ->
            val lid: Long = lhs.getLong("noteCurrentTime")
            val rid: Long = rhs.getLong("noteCurrentTime")
            lid.compareTo(rid)
        })

        return JSONArray(sortedValues)
    }

但是,这只会返回排序后的值,没有键,它们现在的顺序是错误的。有没有办法对 LinkedHashMap 的值进行排序并保持键的正确顺序?任何和所有的帮助将不胜感激。

【问题讨论】:

    标签: java android kotlin retrofit linkedhashmap


    【解决方案1】:

    您可以将映射转换为(键值对的)列表,对其进行排序,然后将其转换回来。

    在您的示例 Map 值类型中,我真的不知道 Json 是什么类型。但是您可以将其转换为 sortedBy lambda,但是对于获取您的长日期而言是必要的。

    val response:  LinkedHashMap<String, Json> = //...
    val sorted: Map<String, Json> = response.toList().sortBy { (_, jsonValue) ->
        jsonValue.getLong("noteCurrentTime")
    }.toMap()
    

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多