我有一个喷嘴状态对象列表,这些对象按“喷嘴状态日期”排序。数据类如下
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)
答案 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。
同样,由于nozzleStateDate
是String
,因此它必须采用正确的格式
类似于yyyy-MM-dd
,因此具有可比性,排序将正确进行。
编辑
要将减法应用于列表中的所有项目,您可以执行以下操作:
nozzleStateList.forEachIndexed { index, item ->
if (index < nozzleStateList.size - 1)
item.nozzleValue -= nozzleSortedList[index + 1].nozzleValue
}
但,您必须将数据类中nozzleValue
的定义从val
更改为var
。