我有一个喷嘴状态对象列表,按照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)
在这种情况下,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
。