我正在尝试检测 kotlin 中两个地图之间的差异。
我设置了以下示例,以便更轻松地解释我想要实现的目标:
fun main() = runBlocking {
val firstMapOfAnimals = mapOf(
Pair("key1", Dog(name = "Dog aaa")),
Pair("key2", Dog(name = "Dog bbb", breed = "Bulldog")),
Pair("key4", Cat(name = "Cat ddd", color = "White")),
Pair("key5", Cat(name = "Cat eee", color = "Blue")),
Pair("key6", Cat(name = "Cat fff", color = "Blue"))
)
val secondMapOfAnimals = mapOf(
Pair("key2", Dog(name = "Dog BBB")),
Pair("key3", Dog(name = "Dog CCC")),
Pair("key4", Cat(name = "Cat DDD", color = "Grey")),
Pair("key6", Dog(name = "Dog FFF", breed = "Husky"))
)
val diffResult = diff(firstMapOfAnimals, secondMapOfAnimals)
val expectedResultMap = mapOf(
Pair("key2", Dog(name = "Dog BBB", breed = "Bulldog")),
Pair("key3", Dog(name = "Dog CCC")),
Pair("key4", Cat(name = "Cat DDD", color = "Grey")),
Pair("key6", Dog(name = "Dog FFF", breed = "Husky"))
)
println("Actual: $diffResult")
println("Expected: $expectedResultMap")
}
private fun diff(
firstMap: Map<String, Animal>,
secondMap: Map<String, Animal>
): Map<String, Animal> {
val result = mapOf<String, Animal>()
//TODO: get differences between firstMap and secondMap
return result
}
abstract class Animal
data class Dog(
val name: String,
val breed: String = "breed"
) : Animal()
data class Cat(
val name: String,
val color: String = "black"
) : Animal()
Run Code Online (Sandbox Code Playgroud)
我的真实代码有点复杂,但我想从简单开始。
基本上,我需要编写diff()方法体才能达到预期的打印结果。目前,这是输出:
Actual: {}
Expected: {key2=Dog(name=Dog BBB, breed=Bulldog), key3=Dog(name=Dog CCC, breed=breed), key4=Cat(name=Cat DDD, color=Grey), key6=Dog(name=Dog FFF, breed=Husky)}
Run Code Online (Sandbox Code Playgroud)
我相信这可以通过运算符组合来解决,但由于我对 kotlin 的了解仍然有限,我不确定如何实现这一点......
有人可以指出我的某个方向吗?
您可以使用现有的minus()运算符扩展功能:
secondMapOfAnimals.minus(firstMapOfAnimals)
Run Code Online (Sandbox Code Playgroud)
或者更简洁地说:
secondMapOfAnimals - firstMapOfAnimals
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以使用to()中缀扩展函数来创建对:
"key1" to Dog(name = "Dog aaa")
Run Code Online (Sandbox Code Playgroud)
代替
Pair("key1", Dog(name = "Dog aaa"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |