如果我有
val incomingIds : List[Int] = ....
val existingIds : List[Int] = //this makes db calls and find existing records (only interested in returning ids)
现在接下来我想以下列方式将incomingIds
与existingIds
进行比较
说我有
val incomingIds : List[Int] = List(2,3,4,5)
val existingIds : List[Int] = List(1,2,3,6)
以上示例建议我的API应该能够找到要删除的ids
(incomingIds
但不在existingIds
中)。在此示例existingIds
中有1,4,5
但incomingIds
表示1,4,5
表示val idsForDeletion :List[Int]
val idsForInsertion :List[Int].
并会有另一个名单称之为
6
所以idsForInsertion
应该进入{{1}}列表。
有一种简单的方法来分区列表吗?
答案 0 :(得分:5)
您可以使用scala的filterNot
函数过滤每个列表中未包含在另一个列表中的项目:
val idsForDeletion = existingIds.filterNot(incomingIds.toSet)
val idsForInsertion = incomingIds.filterNot(existingIds.toSet)
答案 1 :(得分:5)
您可以使用diff
def diff(that: collection.Seq[A]): List[A]
它计算此列表与另一个序列之间的多集差异。
scala> val incomingIds : List[Int] = List(2,3,4,5)
incomingIds: List[Int] = List(2, 3, 4, 5)
scala> val existingIds : List[Int] = List(1,2,3,6)
existingIds: List[Int] = List(1, 2, 3, 6)
scala> (incomingIds diff existingIds).toSet
res1: scala.collection.immutable.Set[Int] = Set(4, 5)
scala> (existingIds diff incomingIds).toSet
res2: scala.collection.immutable.Set[Int] = Set(1, 6)