Scala覆盖某一类型的等于

Scala覆盖某一类型的等于,scala,equals,case-class,Scala,Equals,Case Class,我有一个方法可以处理两个序列。我使用groupBy函数,该函数反过来作用于equals方法来实际分组我要求它分组的元素。以下是我的方法: def mergeFunc[T][B](seq1: Seq[(T, B)], seq2: Seq[(T, B)]) = { val result = seq1.groupBy(_._1).mapValues(_.foldLeft(0)((total, current) => total + current._2)) ......

我有一个方法可以处理两个序列。我使用groupBy函数,该函数反过来作用于equals方法来实际分组我要求它分组的元素。以下是我的方法:

  def mergeFunc[T][B](seq1: Seq[(T, B)], seq2: Seq[(T, B)]) = {
    val result = seq1.groupBy(_._1).mapValues(_.foldLeft(0)((total, current) => total + current._2))
    ......
    ......
  }
在上面的函数中,我如何使groupBy也适用于我的案例类?例如,我有一个case类,它是其他类型(可能是也可能不是case类)的组合,我不想为所有这些类型编写equals实现。对于传递给此方法的case类,如何隐式或显式地指定:

 mergeFunc[TypeA][Long](Seq(TypeA, Long), Seq(TypeA, Long))

我如何保证groupBy在一个equals方法上工作,而我想将该方法作为参数传递给此方法?

2个选项-使它们都是case类,或者对对象创建一个重载
groupBy
,该重载使用
Ordering
,而不是
equals
方法,将所有对象都作为case类不起作用。你能详细说明第二种选择吗?我如何调用过载的groupBy?或者更确切地说,我如何传递排序?嗯,您可以查看
groupBy
方法的源代码,并对其进行扩展以支持自定义
排序。等等,也许它已经在那里了。。。我要检查一下我相信你的第二个代码块是错误的。我想你的意思是:
mergeFunc[TypeA][Long](Seq[(TypeA,Long)],Seq[(TypeA,Long)])
。对于非case类,我看不到任何方法可以编写一个
equals
,来捕获所需的相等语义。我的建议是在继续之前仔细阅读Scala编程的第28章。