当前位置: 首页 > 知识库问答 >
问题:

如何在Kotlin中创建Hashmap进行排序

西门振
2023-03-14

我知道这个字符(:)在我的陈述中毫无意义,但我想解释一下我想要什么。我想通过添加Arraylist并使用sortedBy对很多哈希图进行排序,但我做不到,因为我的值返回字符串。

这是我的代码:

newReference.addValueEventListener(object : ValueEventListener{

            override fun onDataChange(p0: DataSnapshot) {

                chatMessages.clear()

                for(ds in p0.child(playerIDmatchWhoIs).children){

                    var hashMap = ds.getValue() as HashMap<String, String>
                    var datetime = hashMap.get("datetime").toString()
                    var usermail = hashMap.get("usermail")
                    var usermessage = hashMap.get("usermessage")

                    chatMessages.add("${usermail}: ${usermessage}")
                    recyclerViewAdapter.notifyDataSetChanged()

                }
            }
        })

(我想排序这个hashMap,它有datetime值,但返回字符串。)

println(hashMap): I/System.out: {datetime=1574807563747, usermessage=jmjgmhg, usermail=1@gmail.com}

共有1个答案

曹经业
2023-03-14

我假设chatMessages属于List类型

data class ChatMessage(val dateTime: Int, val userMail: String?, val userMessage: String?) : Comparable<ChatMessage> {
    override fun compareTo(other: ChatMessage) = this.dateTime.compareTo(other.dateTime)
}

如您所见,这个类实现了Comparable

private val chatMessages = mutableListOf<ChatMessage>()

您可以调用聊天信息。sort()然后将根据日期时间对列表进行排序(请参阅聊天信息比较的实现)。最终的代码如下所示:

data class ChatMessage(val dateTime:Int?, val userMail: String?, val userMessage: String?) : Comparable<ChatMessage> {
    override fun compareTo(other: ChatMessage) = this.dateTime.compareTo(other.dateTime)
}

private val chatMessages = mutableListOf<ChatMessage>()

fun yourCode() {
    newReference.addValueEventListener(object : ValueEventListener {

        /* Use proper variable naming. Nobody will understand, what p0 is, but if you name
        it dataSnapshot, everyone knows at a glance. */
        override fun onDataChange(dataSnapshot: DataSnapshot) {

            chatMessages.clear()

            // Again, what is ds exactly? Name it properly.
            for (ds in dataSnapshot.child(playerIDmatchWhoIs).children) {
                // Kotlin recommends to use val instead of var.
                // This way, you know that your variables cannot be modified unless you want them to be modified.
                val hashMap = ds.getValue() as HashMap<String, String>

                // use indexing instead of the get() method
                val dateTime = hashMap["datetime"]
                val userMail = hashMap["usermail"]
                val userMessage = hashMap["usermessage"]

                // TODO: Handle null values properly
                chatMessages.add(ChatMessage(dateTime!!.toInt(), userMail, userMessage))
                recyclerViewAdapter.notifyDataSetChanged()

            }

            chatMessages.sort()
        }
    })
}

这假设您希望将时间戳存储为整数。然而,我宁愿推荐使用java这样的时间库。时间(内置于java中)。在这种情况下,可以使用java。时间Instant,它有更多处理时间的可能性和所有处理时间的困难。

阅读更多关于java的信息。时间Android文档中的即时。如果您想学习如何将字符串解析为java。时间即时,这可能很有趣。

 类似资料:
  • 问题内容: 我们如何排序? 我想根据中的值进行排序。 问题答案: 你是否必须使用HashMap?如果只需要Map Interface,请使用TreeMap 如果要通过比较HashMap中的值进行排序。你必须编写代码才能执行此操作,如果要执行此操作,则可以对HashMap的值进行排序: 如果你想经常访问此排序列表,则可以将元素插入到中,尽管集合和列表的语义有些不同。

  • 我认为这可能是Openshift试图在创建项目的同时创建对象的一个问题,但它在试图创建对象的时候没有找到项目。为了解决这个问题,我尝试使用注释,但得到了相同的错误 如能提供任何协助,将不胜感激

  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序

  • 问题内容: 获取目录中所有文件的列表的最佳方法是什么,按日期排序[创建| 修改],在Windows机器上使用python? 问题答案: 这@Greg Hewgill是答案的更详细的版本。这是最符合问题要求的。它区分了创建日期和修改日期(至少在Windows上如此)。 例:

  • 在用Python和其他动态语言工作了4年之后,我又回到了用C++工作。我希望能够使用unordered_map或map类创建一个递归嵌套列表(如上面的Python代码所示)。 我找不到办法去做那件事。 我想要实现的是键应该是char/string类型的,但是要插入的值应该是int类型的。 请告诉我这是怎么做的。 我最接近的是这个 但是我应该重载什么来获得上面的确切语法呢? 提前道谢。

  • 我想创建一个十进制格式化程序,它最多可以显示两个十进制数字,并带有一个给定的分隔符。 例如,使用分隔符 我想用静态编程语言来做这件事,我想我必须使用但是不明白如何做。你能帮我吗?