我有一个对象列表
data class OldFormat(ShiftId: Int, NozzleValue: Int, NozzleId: Int , UserId: Int)
Run Code Online (Sandbox Code Playgroud)
我想按两个字段“shiftId 和 userId”进行分组,然后从同一组的最小值中减去每个组的最大值,然后对结果求和,然后将其转换为此类的新对象:
data class NewFormat(ShiftId: Int, NozzleValue: Int, UserId: Int)
Run Code Online (Sandbox Code Playgroud)
过程是这样的:
listOfOldFormat -> groupby(shiftId, userId) -> sum(maximumValue-minimumValue) -> listOfNewFormat
Run Code Online (Sandbox Code Playgroud)
我们有groupBy功能,所以我们有我们需要的一切。
我不知道你的意思是什么
用同组的最小值减去每组的最大值,然后将结果相加
我应该总结什么?所以,我这样做group.value.max - group.value.min是nozzeValue为了NewFormat。
代码片段:
data class OldFormat(val shiftId: Int, val nozzleValue: Int, val nozzleId: Int, val userId: Int)
data class NewFormat(val shiftId: Int, val nozzleValue: Int, val userId: Int)
fun main() {
val old = listOf(
OldFormat(0, 10, 10, 0),
OldFormat(0, 120, 10, 1),
OldFormat(1, 11, 8, 10),
OldFormat(0, 10, 1, 1),
OldFormat(1, 50, 10, 10)
) // Example data
old.groupBy {
it.shiftId to it.userId // After it we have Map<Key, List<OldFormat>>, where key is pair of shiftId and userId
}.map { entry ->
val max = entry.value.maxBy { it.nozzleValue }?.nozzleValue ?: 0
val min = entry.value.minBy { it.nozzleValue }?.nozzleValue ?: 0
entry.key to (max - min) // Just do whatever you want with that data
}.map {
NewFormat(
shiftId = it.first.first,
userId = it.first.second,
nozzleValue = it.second
) // And now map it into type you want
}.let {
println(it) // Just for seeing result
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7492 次 |
| 最近记录: |