比较Scala中的两个列表[CustomObject]

比较Scala中的两个列表[CustomObject],scala,Scala,假设我有两个列表: val list1:List[CustomObject] = List(obj1, obj2, obj3) val list2:List[CustomObject] = List(obj4, obj5, obj6) 我想知道在Scala中是否有一种方法,可以使用这两个列表并比较第一个列表中的obj.name是否出现在第二个列表中 这可以使用2个内部循环和一个标志来完成。 然而,我想知道Scala中是否有什么东西可以做到这一点。类似的东西应该可以工作 list1.exists

假设我有两个列表:

val list1:List[CustomObject] = List(obj1, obj2, obj3)
val list2:List[CustomObject] = List(obj4, obj5, obj6)
我想知道在Scala中是否有一种方法,可以使用这两个列表并比较第一个列表中的
obj.name
是否出现在第二个列表中

这可以使用2个内部循环和一个标志来完成。
然而,我想知道Scala中是否有什么东西可以做到这一点。

类似的东西应该可以工作

list1.exists(a => list2.exists( b => a.name == b.name))

类似的方法应该会奏效

list1.exists(a => list2.exists( b => a.name == b.name))

如果要用于比较的属性已排序,则此操作有效:

import scala.collection.immutable.SortedSet
val set1 = SortedSet(list1: _*)(Ordering by (_.name))
val set2 = SortedSet(list2: _*)(Ordering by (_.name))

val result = set1 &~ set2 union set2 &~ set1
val result2 = set1 | set2 diff set1 & set2 // also works
for {
  x <- list1 ++ list2 // you want elements from both, right?
  if list1.forall(_.name != x.name) || list2.forall(_.name != x.name)
} yield x
现在,如果这是不可能的,这是可行的:

import scala.collection.immutable.SortedSet
val set1 = SortedSet(list1: _*)(Ordering by (_.name))
val set2 = SortedSet(list2: _*)(Ordering by (_.name))

val result = set1 &~ set2 union set2 &~ set1
val result2 = set1 | set2 diff set1 & set2 // also works
for {
  x <- list1 ++ list2 // you want elements from both, right?
  if list1.forall(_.name != x.name) || list2.forall(_.name != x.name)
} yield x

如果要用于比较的属性已排序,则此操作有效:

import scala.collection.immutable.SortedSet
val set1 = SortedSet(list1: _*)(Ordering by (_.name))
val set2 = SortedSet(list2: _*)(Ordering by (_.name))

val result = set1 &~ set2 union set2 &~ set1
val result2 = set1 | set2 diff set1 & set2 // also works
for {
  x <- list1 ++ list2 // you want elements from both, right?
  if list1.forall(_.name != x.name) || list2.forall(_.name != x.name)
} yield x
现在,如果这是不可能的,这是可行的:

import scala.collection.immutable.SortedSet
val set1 = SortedSet(list1: _*)(Ordering by (_.name))
val set2 = SortedSet(list2: _*)(Ordering by (_.name))

val result = set1 &~ set2 union set2 &~ set1
val result2 = set1 | set2 diff set1 & set2 // also works
for {
  x <- list1 ++ list2 // you want elements from both, right?
  if list1.forall(_.name != x.name) || list2.forall(_.name != x.name)
} yield x

以下内容对我很有用:

 val comparisonResultList: List[Car] =
      for (l1 <- list1 if list2.filter(_.referenceName==l1.referenceName)==Nil)
      yield l1
val比较结果列表:列表[Car]=

对于(l1而言,以下内容对我很有用:

 val comparisonResultList: List[Car] =
      for (l1 <- list1 if list2.filter(_.referenceName==l1.referenceName)==Nil)
      yield l1
val比较结果列表:列表[Car]=

对于(l1实际上我有这样的smth:val list1=List(1,2,3,4,5)val list2=List(5,6,7,8)val result=list1.map(x=>{if((list2.exists(l=>l==x))==false)x}结果是result:List[AnyVal]=List(1,2,3,4,())我怎么能只返回List[Int]=List(1,2,3,4)我相信我的问题的解决方案是折叠式的..嗯,还在读它.实际上我有这样的smth:val list1=List(1,2,3,4,5)val list2=List(5,6,7,8)val result=list1.map(x=>{if((list2.exists)(l=>l==x))=false)x}结果是result:List[AnyVal]=List(1,2,3,4,())我怎样才能返回List[Int]=List(1,2,3,4)我相信我的问题的解决方案是折叠..嗯,仍在阅读有关它的内容。你不太清楚到底想要什么。你能提供一个输入和预期输出的示例吗?假设我们有一个名为Car的类,它有两个属性:carName和CarColor现在我们有两个列表:list1=List(carObj1,carObj2,carObj3)list2=List(carObj4,carObj5,carObj6)让我们假设carObj3.name==carObj4.name我期望的结果:result:List[Car]=List[carObj1,carObj2,carObj5,carObj6]我已经想出了一个方法:val result=for(zIt不太清楚您到底想要什么。您能提供一个输入和预期输出的示例吗?假设我们有一个名为Car的类,它有两个属性:carName和CarColor现在我们有两个列表:list1=List(carObj1,carObj2,carObj3)list2=List(carObj4,carObj5,carObj6)让我们假设carObj3.name==carObj4.name我期望的结果:result:List[Car]=List[carObj1,carObj2,carObj5,carObj6]我已经想出了一个方法:val result=for(z