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]()
是我的一组 ApiCall
s
我写了一个函数,只有在集合中不存在 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
中添加太多元素,所以我发现这种方法对我来说更容易处理..
我有案例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]()
是我的一组 ApiCall
s
我写了一个函数,只有在集合中不存在 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
中添加太多元素,所以我发现这种方法对我来说更容易处理..