首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从前一个对象中的值中减去当前对象中的值,然后放入一个新对象。

从前一个对象中的值中减去当前对象中的值,然后放入一个新对象。
EN

Stack Overflow用户
提问于 2019-03-07 12:01:28
回答 1查看 217关注 0票数 0

我有一个nozzleState对象列表,这些对象按nozzleStateDate排序。数据类如下所示

代码语言:javascript
运行
复制
data class NozzleState(val shiftId: Int, val nozzleValue: Int, val nozzleId: Int, val userId: Int, nozzleStateDate: String)

我需要从前一个对象的nozzleValue中减去最新的对象的nozzleStateObject,我现在有了这段代码,但是我不知道下一步该做什么:

代码语言:javascript
运行
复制
val nozzleSaleReport = nozzleStateList
                .sortedByDescending { item-> item.nozzleStateDate }.groupBy {
            it.nozzleId}

换句话说,如果有

代码语言:javascript
运行
复制
(10, 8, 6, 3) 

对于列表中的nozzleValue字段,结果是

代码语言:javascript
运行
复制
(10-8, 8-6, 6-3, 3-0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 13:07:27

在这种情况下,nozzleSaleReport没有帮助。

如果nozzleStateList已经按nozzleStateDate 升序排序,那么您需要:

代码语言:javascript
运行
复制
val dif = nozzleSortedList.last().nozzleValue - nozzleSortedList[nozzleSortedList.size - 2].nozzleValue

如果没有对nozzleStateList进行排序,那么首先需要对其排序,降序

代码语言:javascript
运行
复制
val nozzleSortedList= nozzleStateList.sortedByDescending { it.nozzleStateDate }
val dif = nozzleSortedList[0].nozzleValue - nozzleSortedList[1].nozzleValue

无论如何,您必须检查列表的大小是否至少为2。

另外,由于nozzleStateDate是一个String,所以它必须采用适当的格式,

就像yyyy-MM-dd一样,所以它是可比较的,排序将是正确的。

编辑

要将减法应用于列表中的所有项,您可以这样做:

代码语言:javascript
运行
复制
nozzleStateList.forEachIndexed { index, item ->
    if (index < nozzleStateList.size - 1)
        item.nozzleValue -= nozzleSortedList[index + 1].nozzleValue 
}

但是,您必须将数据类中nozzleValue的定义从val更改为var

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55043296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档