我知道这个字符 (:) 在我的陈述中毫无意义,但我想解释我想要什么。我想对添加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
(参见compareTo
in的实现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.Instant
which 有更多的可能性来处理时间以及处理时间的所有困难。
java.time.Instant
在Android 文档中阅读更多信息。如果您想学习如何解析 a String
to java.time.Instant
,这可能会很有趣。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句