2016-08-11 32 views
2

通常,我会在列表上调用不同的清除重复项或将其变为Set。现在我有一个List[MyObject]MyObject是一个案例类,见下图:如何根据CaseObj的属性使List [CaseObj]不同?

case class MyObject(s1: String, s2:String, s3:String) 

比方说,我们有以下情况:

val myObj1 = MyObject("", "gmail,com", "some text") 
val myObj2 = MyObject("", "gmail,com", "") 
val myObj3 = MyObject("some text", "gmail.com", "") 
val myObj4 = MyObject("some text", "gmail.com", "some text") 
val myObj5 = MyObject("", "ymail.com", "") 
val myObj6 = MyObject("", "ymail.com", "some text") 

val myList = List(myObj1, myObj2, myObj3, myObj4, myObj5, myObj6) 

两个问题:

  1. 我怎么能指望有多少个对象受影响?基于s2的内容重复?
  2. 如何根据s2使清单不同?我会考虑两个案例对象相同时s2 == s2。我是否需要将案例类转换为普通类并重写equals?我是否需要一个自己的比较器,或者我可以使用一些Scala API方法来存档相同的?
+2

这些是两个问题,应该这样分开。 #1对我来说不清楚。 #2是http://stackoverflow.com/questions/3912753/scala-remove-duplicates-in-list-of-objects –

+0

的重复问题1意味着:如何查看有多少MyObject对象在s2中有相同的内容no重要的是s1或s3中的内容。我只在乎这里的S2。问题2意味着:我只想用s2保留单个MyObject。我不在乎哪一个。结果列表应根据案例类别属性s2区分。所以,上面的myList在转换后只有2个条目。 – user3350744

回答

5

如何计算有多少个对象受到影响?基于s2的 内容的重复项?

如果你要计算有多少个对象在每个重复组(如果你只想知道有多少对象将如何被删除,从大小减去1):

myList.groupBy(_.s2).map(x => (x._1, x._2.size)) 
res0: scala.collection.immutable.Map[String,Int] = Map(ymail.com -> 2, gmail.com -> 2, gmail,com -> 2) 

我怎样才能使清单基于S2清楚?

myList.groupBy(_.s2).map(_._2.head) 
res1: scala.collection.immutable.Iterable[MyObject] = List(MyObject(,ymail.com,), MyObject(some text,gmail.com,), MyObject(,gmail,com,some text)) 
相关问题