如何在 Kotlin 中创建 Hashmap<String,Int : String,String : String,String> 进行排序

电影院线

我知道这个字符 (:) 在我的陈述中毫无意义,但我想解释我想要什么。我想对添加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, [email protected]}
瓦布布

我假设那chatMessages是类型List<String>这通常很糟糕,因为您不能使用字符串进行任何操作。我建议您创建一个data class包含有关聊天消息的所有信息的文件,如下所示:

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<ChatMessage>接口。如果你然后chatMessages像这样定义列表

private val chatMessages = mutableListOf<ChatMessage>()

您可以调用chatMessages.sort()which 将根据dateTime(参见compareToin的实现ChatMessage对列表进行排序最终代码如下所示:

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.time(内置到java中)这样的时间库在这种情况下,您可以使用java.time.Instantwhich 有更多的可能性来处理时间以及处理时间的所有困难。

java.time.InstantAndroid 文档中阅读更多信息如果您想学习如何解析 a Stringto java.time.Instant可能会很有趣。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Kotlin中按其值对HashMap <String,Int>顺序进行排序?

如何对HashMap <String,Integer []>进行排序?

如何排序HashMap <String,String> DESC

如何按值对Hashmap <String,Arraylist <String >>类型的Hashmap进行排序?

如何在SharedPreferences中存储ArrayList <HashMap <String,String >>?

如何在AlertDialog中设置ArrayList <HashMap <String,String >>?

在 Java 中对 HashMap <Integer, List<String>> 进行排序

如何在Java中实现像HashMap <String,Hashmap <String,String >>这样的多值哈希图

如何对Map <String,Map <String,int >> Dart进行排序

根据日期时间对ArrayList <HashMap <String,String >>进行排序

按名称对HashMap <String [],Boolean>进行排序,该名称按升序出现在String []中

Kotlin:如何在String中交换字符

如何在Kotlin中启动String数组?

在 Kotlin 中使用 Int 和 String 对 ArrayList 进行排序

如何在 c# 中按 Item3 对 ConcurrentBag<Tuple<string,int,decimal>>() 进行排序?

如何在 Swift 中对 Int 类型的 String 格式数组进行排序

如何将String与HashMap进行比较

如何从RDD [String]创建特定字段的hashMap?

如何从ArrayList <HashMap <String,String >>中获取所有元素

如何对向量<pair <string,pair <int,int >>>进行排序?

如何迭代Arraylist <HashMap <String,String >>?

如何从HashMap <String,String>删除“ Null”键?

如何使Eclipselink的moxy元帅HashMap <String,String>?

如何存储/保存HashMap <String,List <String >>

如何从Hashmap <String String>获取ArrayList

如何在HashMap <Integer,String>中获得两个最高值,从而进行排名

在 Java HashMap<String, String[]> 中查找元素

如何在Drools 5.4.0中从HashMap <String,Object>获取BigDecimal

如何在HashMap值中获取String []数组的长度