科特林从先前对象中的值减去当前对象中的值,然后放入新对象

时间:2019-03-07 12:01:29

标签: kotlin

我有一个喷嘴状态对象列表,这些对象按“喷嘴状态日期”排序。数据类如下

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

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

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

换句话说,如果有

(10, 8, 6, 3) 

对于列表中的zzleValue字段,结果将为

(10-8, 8-6, 6-3, 3-0)

1 个答案:

答案 0 :(得分: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