Scala仅通过检查case类的特定字段来添加要设置的元素
我有一门案例课Scala仅通过检查case类的特定字段来添加要设置的元素,scala,generics,scala-collections,Scala,Generics,Scala Collections,我有一门案例课 case class ApiCall(a: String, b: String, c: String, d: String, e: String, f: String) 我还有一个可变集:private-var-ApiCall:mutable.Set[ApiCall]=mutable.Set[ApiCall]() 问题是,我可能会得到以下ApiCall元素: ApiCall(a1, b1, c1, d1, e1, f1) ApiCall(a1, b1, c1, d2, e2,
case class ApiCall(a: String, b: String, c: String, d: String, e: String, f: String)
我还有一个可变集:private-var-ApiCall:mutable.Set[ApiCall]=mutable.Set[ApiCall]()
问题是,我可能会得到以下ApiCall
元素:
ApiCall(a1, b1, c1, d1, e1, f1)
ApiCall(a1, b1, c1, d2, e2, f2)
只有当案例类ApiCall
的(a,b,c)
的唯一组合不存在时,我才必须向集合中添加元素。我无法修改case类本身,因为它正在多个地方使用
是否可以仅通过查看某些字段而不是所有字段将案例类元素添加到集合中?在您的案例中,您可能希望使用
Map
而不是set
:
val ApiCall=mutable.Map[(字符串,字符串,字符串),ApiCall]()
此外,映射
中匹配键的值也会被替换,您可能需要一个单独的方法来更新API调用映射:
def updateApiCalls(调用:ApiCall):单位={
getOrElseUpdate((call.a、call.b、call.c)、call)
()
}
我通过一个小的变通方法解决了这个问题:
private var\u ApiCall: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
}
我在集合中也不会有太多的元素,因此我发现这种方法对我来说更容易处理。如果事件(基于三部分键)已经存在,那么我不想更新它。相反,它应该被丢弃。。