2016-08-11 9 views
2

通常は、重複を削除するか、SetにするためにListでdistinctを呼び出します。今私はList[MyObject]を持っています。 MyObjectはケースクラスで、以下を参照してください:私はどのように多くのオブジェクトでカウントすることができますどのようにリスト[CaseObj]をCaseObjのプロパティに基づいて区別する方法は?

  1. 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) 
    

    二つの質問:

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

    は、我々は次のような場合があるとしましょう影響を受けた? s2の内容に基づいて重複していますか?

  2. s2に基づいてリストを区別できるようにするにはどうすればよいですか?私はs2 == s2のときに2つのケースのオブジェクトを同じと見なします。ケースクラスを通常のクラスに変更し、等価をオーバーライドする必要がありますか?このために独自のComparatorが必要ですか?Scala APIメソッドを使用して同じものをアーカイブできますか?
+2

これらは2つの質問であり、そのように分割する必要があります。 #1は私には分かりません。 #2はhttp://stackoverflow.com/questions/3912753/scala-remove-duplicates-in-list-of-objectsの複製です –

+0

質問1とは、s2で同じコンテンツを持つMyObjectオブジェクトの数を確認する方法です。 s1またはs3の内容私はここでs2を気にします。質問2は、ただ一つのMyObjectをs2で保つことを意味します。私はどちらが気にしない。結果のリストは、ケースクラスプロパティs2に基づいて区別する必要があります。したがって、上記のmyListは変換後に2つのエントリしか持たないでしょう。 – user3350744

答えて

5

影響を受けるオブジェクトの数はどのようにしてカウントできますか? のコンテンツに基づいて重複していますか?

あなたが重複する各グループにあるどのように多くのオブジェクトカウントするようにしたい場合は

(あなただけの多くのオブジェクトが削除されようとしている方法を知りたい場合は、サイズから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)) 
関連する問題