2016-08-11 37 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)) 
相關問題