kotlin 两个list根据特定的字段来比较差值
时间: 2023-08-15 19:05:52 浏览: 297
plot的两个曲线比较差值.m
你可以使用 Kotlin 的 `groupBy` 和 `mapValues` 函数来实现这个功能。假设你有两个数据类 `Item` 和 `Diff`,`Item` 中包含一个字段 `id`,`Diff` 中包含三个字段 `id`、`oldValue` 和 `newValue`。那么你可以按照 `id` 字段来比较这两个列表的差异,代码如下:
```kotlin
data class Item(val id: Int, val value: String)
data class Diff(val id: Int, val oldValue: String, val newValue: String)
val oldList = listOf(Item(1, "a"), Item(2, "b"), Item(3, "c"))
val newList = listOf(Item(1, "a"), Item(2, "x"), Item(4, "d"))
val oldMap = oldList.groupBy { it.id }
val newMap = newList.groupBy { it.id }
val diff = oldMap.mapValues { entry ->
val id = entry.key
val oldItem = entry.value.first()
val newItem = newMap[id]?.firstOrNull()
if (newItem == null) {
Diff(id, oldItem.value, "")
} else if (oldItem.value != newItem.value) {
Diff(id, oldItem.value, newItem.value)
} else {
null
}
}.values.filterNotNull()
println(diff) // 输出 [Diff(id=2, oldValue=b, newValue=x), Diff(id=3, oldValue=c, newValue=)]
```
这里先把两个列表按照 `id` 字段分组,然后遍历旧列表的分组,对于每个分组,找到对应的新列表中的项,根据 `value` 字段判断是否有变化,最后把变化的项转换为 `Diff` 类型的对象,最终的结果是一个 `Diff` 对象的列表。
阅读全文