我需要在directmessages
列表中执行两个进程
1.标记最后一封邮件
2.按时间戳降序排序
当我同时做其中一个时,它们做得很好,但当我同时做两个时,列表中的一些项目重复;这里可以看到我的代码:
fun List<DirectMessage>.doProcesses(): List<DirectMessage> {
for (i in this.indices) {
if (i == 0) {
this[i].isLastMessage = true
continue
}
this[i].isLastMessage =
this[i - 1].senderUserId != this[i].senderUserId
}
return sortedByDescending { it.timestamp }
}
和DirectMessage
数据类:
data class DirectMessage(
val messageId: Int,
val text: String,
val timestamp: Long,
val senderUserId: Int,
var isLastMessage: Boolean = true
)
你的列表是不变的吗?如果是的话,在我看来它应该返回另一个列表,这样就不会修改一个不可变的列表。
说明:
不可变列表,如其名称所示,在实例化后不能修改。就像任何不可变的对象一样。因此,当您想要更新一个不可变的对象时,您必须返回一个包含要修改和更新的元素的新实例。这避免了典型的副作用,例如在Java可以发现。
最后,如果您真的想要修改您的列表而不返回新实例,那么您应该使用可变列表。
所有以sortedby
为前缀的Kotlin函数都会生成一个新列表,它表示原始列表的排序副本。
您需要的是就地排序,这可以使用sortby
函数来实现。但是,它们显然适用于可变数据结构,如mutableList
或array
。
可能重复:< br >什么是复制省略和返回值优化? 我有以下程序: 我期望的输出如下: 但我得到以下信息: 问题是:为什么不将对象从func返回到main调用我的复制构造函数?
可能重复:< br >什么是复制省略和返回值优化? 我很难理解为什么在下面的代码中没有调用复制构造函数。 有人能解释一下为什么只调用构造函数,不调用复制构造函数吗?< br >谢谢。
我仍在学习封装。我有一个,其中每个emcapsulated都有一个数组,以及它们的所有设置程序 现在在我的程序中,我注意到数组listRule(其中添加了与语法相关的规则)在每次添加新语法时都会被覆盖。我已经能够识别出错误发生在会清空listRule中所有其他语法的内容,因此listRule似乎对所有语法都是一样的。我的数组listRule创建不正确还是我的循环?
问题内容: Java为什么不支持C ++中的复制构造函数? 问题答案: Java。只是没有像在C ++中那样隐式地调用它们,我怀疑这是您的真正问题。 首先,复制构造函数无非是: 现在,C ++将使用以下语句隐式调用复制构造函数: 在这种情况下,克隆/复制在Java中根本没有意义,因为所有b1和b2都是引用,而不是像C 中那样的值对象。在C 中,该语句复制对象的状态。在Java中,它只是复制 引用
问题内容: 我创建了一个将列表作为参数的函数。它会随机排列列表,替换第一个元素,然后返回新列表。 改组对我的问题没有影响。但是,我很惊讶地看到返回的importedList覆盖了原始的firstList。 通过在函数中复制列表,我找到了一种解决方法,但是效率似乎很低。 我的问题是为什么该函数替换firstList?例如,如果是字符串,则不会发生这种情况。 问题答案: 字符串,整数,元组是不可变的p
我今天想使用,但出现了如下错误: 所以我想我应该清除并重新安装(如下所示)https://www.rosehosting.com/blog/how-to-install-pip-on-ubuntu-16-04/)但仍然得到: 我怎样才能提高我的水平