gpt4 book ai didi

scala - 如何根据 CaseObj 的属性使 List[CaseObj] 不同?

转载 作者:行者123 更新时间:2023-12-03 20:33:38 24 4
gpt4 key购买 nike

通常我在 List 上调用 distinct 以删除重复项或将其转换为 Set .现在我有一个 List[MyObject] . MyObject是一个案例类,见下文:

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)

两个问题:
  • 我如何计算有多少对象受到影响?基于 s2 的内容重复?
  • 如何根据 s2 使列表与众不同?当 s2 == s2 时,我会认为两个 case 对象相同.我是否需要将 case 类转换为普通类并覆盖 equals?我是否需要一个我自己的比较器,或者我可以使用一些 Scala API 方法来存档它吗?
  • 最佳答案

    How can I count how many objects are affected? Duplicates based on the content of s2?



    如果要计算每个重复组中有多少个对象(如果只想知道要删除多少个对象,请从 size 中减去 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)

    How can I make the List distinct based on 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))

    关于scala - 如何根据 CaseObj 的属性使 List[CaseObj] 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900267/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com