在一个站点中查找对象,但在不使用设置操作 diff 的情况下不查找另一个站点中的对象



Foo 对象的两组,s1 和 s2,其中

case class Foo(id: Long, attri01: String) {
  override def hashCode: Int = { 
    val prime = 41
    prime * attri01.hashCode
 }
 override def equals(o: Any): Boolean = o match {
   case Foo(_, attri01) => attri01 == this.attri01
   case => false
 }
}

等于和哈希代码方法被覆盖用于数据比较。

现在,我需要找出 s1 中的所有对象,而不是 s2 中的所有对象。我不能使用

s1.diff(s2)

由于等于/哈希代码方法覆盖。它可能会使用过滤器

s1.filter(_.id ...)

或者创建一个映射,其中 ID 字段作为其键,其对象作为第一个集合的值,并删除第二个集合中的任何条目。

用 Scala 的方式解决这个问题的好方法是什么?

更新:

我在想下面这样的事情:

val set2IDs = s2.map(a => a.id)
val result = s1.map(Foo(id, _) => !set2IDs.contains(id))

但是,第二行代码不起作用。

case class FooWrapper(id:Long)(val foo:Foo)
def wrap(foo:Foo) = new FooWrapper(foo.id)(foo)
val result = s1.map(wrap).diff(s2.map(wrap)).map(_.foo)

最新更新