科特林;从先前对象中的值中减去当前对象中的值并放入新对象中

问题描述 投票:0回答:1

我有一个喷嘴状态对象列表,按照nozzleStateDate排序。数据类如下

data class NozzleState(val shiftId: Int, val nozzleValue: Int, val nozzleId: Int, val userId: Int, nozzleStateDate: String)

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

val nozzleSaleReport = nozzleStateList
                .sortedByDescending { item-> item.nozzleStateDate }.groupBy {
            it.nozzleId}

换句话说,如果有的话

(10, 8, 6, 3) 

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

(10-8, 8-6, 6-3, 3-0)
kotlin
1个回答
2
投票

在这种情况下,nozzleSaleReport没有帮助。 如果nozzleStateList已经按nozzleStateDate升序排序,那么你需要:

val dif = nozzleSortedList.last().nozzleValue - nozzleSortedList[nozzleSortedList.size - 2].nozzleValue

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

val nozzleSortedList= nozzleStateList.sortedByDescending { it.nozzleStateDate }
val dif = nozzleSortedList[0].nozzleValue - nozzleSortedList[1].nozzleValue

无论如何,您必须检查列表的大小是否至少为2。 此外,因为nozzleStateDateString,它必须是正确的格式, 像yyyy-MM-dd所以它是可比较的,排序将正确完成。 编辑 要将减法应用于列表中的所有项,您可以执行以下操作:

nozzleStateList.forEachIndexed { index, item ->
    if (index < nozzleStateList.size - 1)
        item.nozzleValue -= nozzleSortedList[index + 1].nozzleValue 
}

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

© www.soinside.com 2019 - 2024. All rights reserved.