Scala/Java:比较两个列表/集合并从两个列表中删除匹配的元素

用户1662067

我有两个不同类型的列表,但两种类型都有相同的字段来识别/比较。

我的要求:我想根据对象的某些字段比较两个列表,一旦从两个列表/集合中匹配删除元素。例如:

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章