我需要在 Jetpack Compose Multiplatform 上实现 Microsoft Excel 的“数据透视表”功能,特别是针对 Windows(尽管这对于解决方案来说并不重要)。
可用输入数据: 具有从接口填充的模型的kotlin 数据类
data class PivotModel(
val substance: String,
var toManufacture: Int,
val onWarehouse: Int
)
我填充列表并以类似forEach循环的方式获取结果,从数据库获取值(条件mainList)
mainList.forEach{
if (current.substance == mainList.substance) {
pivotList.add(PivotModel(
pivot.x, pivot.y, pivot.z))
}
}
结果,我在文本字段中显示数据
val newList = pivotList.distinct()
Text(text = newList.toString())
一切都很好,我得到了我需要的数据,没有重复。然而,我需要“折叠”列表中相同的元素,不是完全折叠,而是部分折叠,我在下面给出了一个例子:
我得到什么:
Парацетамол, 10, 115
Ибупрофен, 10, 197
Анальгин, 10, 100
Ромашка, 10, 102
Градусник, 10, 210
Анальгин, 15, 100
处理distinct()后,我只能从完整的重复项中删除,即两片安乃近 / 10,100 将被感知为一颗安乃近 / 10, 100(全双),两片安乃近 10, 100 和 15, 100 将被感知为不同,因为型号不同。如果模型的一部分不同,那么整个模型就会不同。
我需要第一个和最后一个值永远不会改变,并且重复项按数量“折叠”,就像前面提到的 Excel 中的 1C 或数据透视表一样。
也就是说,我需要得到的示例应该如下所示:
Парацетамол, 10, 115
Ибупрофен, 10, 197
Анальгин, 25, 100
Ромашка, 10, 102
Градусник, 10, 210
安乃近应该变成 20,而不是 10 的两个重复项,由于distinct()传递,排序会忽略这两个重复项
uniqueBy { it .substance }没有帮助,它只从列表中选择第一个建议值,就像调用getFirstOrNull一样
有想法,但没有解决方案。
PS 我与医学和药品无关,我只是填写了一个堆栈的示例-_-
我勾勒出分组+聚合的思路,然后将结果放回到列表中。
输出