我有两个不同类型的列表,但两种类型都有相同的字段来识别/比较。
我的要求:我想根据对象的某些字段比较两个列表,一旦从两个列表/集合中匹配删除元素。例如:
case class Type1(name:String, surname: String, address: Int)
case class Type2(name:String, surname: String, address: Int, dummy: String)
因此,如果两个列表对两种类型具有相同的字段数据,则记录将被匹配。
我的清单:
val type1List = List(Type1("name1","surname1", 1),
Type1("name2","surname2", 2),
Type1("name3","surname3", 3)
)
val type2List = List(Type2("name1","surname1", 1),
Type2("name2","surname2", 2),
Type2("name4","surname4", 4)
)
比较 type1List 和 type2List,从两个列表中删除匹配的日期。type1List 应仅包含:
val type1List = List(
Type1("name3","surname3", 3)
)
type2List 应仅包含:
val type2List = List(
Type2("name4","surname4", 4)
)
我尝试了 looping/interation ,但这似乎太复杂了,性能受到了影响。提前致谢。
如果你不能调整 2 Types,这里有一个务实的解决方案:
首先找到“等于”
val equals: Seq[Type1] = type1List.filter {
case Type1(n, sn, a) =>
type2List.exists { case Type2(n2, sn2, a2, _) =>
n == n2 && sn == sn2 && a == a2
}
}
然后过滤两个列表:
val filteredType1List = type1List.filterNot(t1 => equals.contains(t1))
val filteredType2List = type2List.filterNot {
case Type2(n2, sn2, a2, _) =>
equals.exists { case Type1(n, sn, a)=>
n == n2 && sn == sn2 && a == a2
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句