我知道这个字符(:)在我的陈述中毫无意义,但我想解释一下我想要什么。我想通过添加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}
我假设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类型的。 请告诉我这是怎么做的。 我最接近的是这个 但是我应该重载什么来获得上面的确切语法呢? 提前道谢。
我想创建一个十进制格式化程序,它最多可以显示两个十进制数字,并带有一个给定的分隔符。 例如,使用分隔符 我想用静态编程语言来做这件事,我想我必须使用但是不明白如何做。你能帮我吗?