合并两个相同类型的案例类,除了某些字段

2023-11-30

如果您有这样的案例类:

case class Foo(x: String, y: String, z: String)

你有两个实例,例如:

Foo("x1","y1","z1")
Foo("x2","y2","z2")

是否可以将实例 1 合并到实例 2 中,除了字段 z 之外,结果将是:

Foo("x1","y1","z2")

我的用例只是通过 Scala API 将 JSON 对象提供给 Backbone 应用程序,然后 Backbone 应用程序返回相同结构的 JSON,以便我可以保存/更新它。这些 JSON 对象被解析为案例类,以便于 Scala 操作。但有些字段永远不应该由客户端更新(例如creationDate)。现在我正在进行手动合并,但我想要一个更通用的解决方案,有点像增强的复制功能。

我想要的是这样的:

instanceFromDB.updateWith(instanceFromBackbone, excludeFields = "creationDate" )

但我希望它是类型安全的:)

Edit:我的案例类有更多字段,我希望默认行为合并字段,除非我明确表示不合并它们。


你想要的已经在那里了;你只需要以另一种方式解决问题即可。

case class Bar(x: String, y: String)
val b1 = Bar("old", "tired")
val b2 = Bar("new", "fresh")

如果你想要一切都在b2没有特别提到,你应该复制b2;任何来自b1你想保留你可以明确提及:

def keepY(b1: Bar, b2: Bar) = b2.copy(y = b1.y)

scala> keepY(b1, b2)
res1: Bar = Bar(new,tired)

只要您在同一案例类的两个实例之间进行复制,并且字段像默认情况一样是不可变的,这就会满足您的要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并两个相同类型的案例类,除了某些字段 的相关文章

随机推荐