我有两个ArrayBuffers,第一个(A
)是另一个的子集,只包含长ID。第二个(B
)包含案例类g
的对象,其中ID为属性。现在,我想循环遍历A
,以便删除B
中与相应ID匹配的所有对象以及A
中的ID。我使用以下方法
def removeID (ID:Long) {
B.find(_.ID == ID) match {
case Some(s) =>
B.remove(B.indexWhere(_.ID == ID))
A -= ID
case None => sys.error("Cannot remove ID $ID")
}
}
我有点困惑,因为我现在得到的错误是:
java.lang.RuntimeException: Cannot remove ID 0
这是没有意义的,因为A
或B
中没有0。我试图弄清楚在循环过程中究竟发生了什么
for(ID <- A) {removeID(ID)}
只对每个第2个元素应用removeID
方法,直到它到达A
的末尾,然后尝试查找不存在的ID 0
。
有人知道这种行为来自哪里吗?
编辑:所以问题不在于移除ID(它应该是这样),而是在ArrayBuffer上的迭代,这是没有意义的。
答案 0 :(得分:0)
您可能会收到该错误,因为没有ID 0.因此case None
部分会被执行。
但我建议你改用过滤器。
def removeID(ID: Long) {
B = B.filterNot(_.ID == ID)
A -= ID
}