Scala 仅通过检查案例的特定字段来添加要设置的元素 class

Scala Add elements to set only by checking specific fields of a case class

我有案例class

case class ApiCall(a: String, b: String, c: String, d: String, e: String, f: String)

我还有一个可变集合:private var apiCalls: mutable.Set[ApiCall] = mutable.Set[ApiCall]()

问题是,我可能会得到以下 ApiCall 个元素:

ApiCall(a1, b1, c1, d1, e1, f1)
ApiCall(a1, b1, c1, d2, e2, f2)

仅当 (a, b, c)case class ApiCall 的唯一组合尚不存在时,我才必须向集合中添加元素。我无法修改大小写 class 本身,因为它在多个地方使用。

是否可以仅通过查看某些字段而不是全部来将 case class 元素添加到集合中?

在您的情况下,您可能希望使用 Map 而不是 Set

val apiCalls = mutable.Map[(String, String, String), ApiCall]()

Map 中匹配键的值也被替换,您可能需要一个单独的方法来更新 API 调用映射:

def updateApiCalls(call: ApiCall): Unit = {
  apiCalls.getOrElseUpdate((call.a, call.b, call.c), call)
  ()
}

我用一个小的解决方法解决了它:

private var _apiCalls: mutable.Set[ApiCall] = mutable.Set[ApiCall]() 是我的一组 ApiCalls

我写了一个函数,只有在集合中不存在 3 部分键 (a, b, c) 时才会添加到集合中:

def addApiCall(e: X): Unit = {
     val m = _x.find(m => m.a == e.a && m.b == e.b && m.c == e.c)
     if (m.isEmpty)
         _x += e
}

我也不打算在 Set 中添加太多元素,所以我发现这种方法对我来说更容易处理..