Jer*_*erg 3 scala tuples group-by
考虑以下结构(实际上结构有点复杂):
case class A(id:String,name:String) {
override def equals(obj: Any):Boolean = {
if (obj == null || !obj.isInstanceOf[A]) return false
val a = obj.asInstanceOf[A]
name == a.name
}
override def hashCode() = {
31 + name.hashCode
}
}
val a1 = A("1","a")
val a2 = A("2","a")
val a3 = A("3","b")
val list = List((a1,a2),(a1,a3),(a2,a3))
Run Code Online (Sandbox Code Playgroud)
现在让我们说我想将所有元组分组为相同的A. 我可以像这样实现它
list.groupBy {
case (x,y) => (x,y)
}
Run Code Online (Sandbox Code Playgroud)
但是,我不喜欢在这里使用模式匹配,因为它不会在这里添加任何内容.我想要一些简单的东西,比如:
list.groupBy(_)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不编译.我甚至不这样做:
list.groupBy[(A,A)](_)
Run Code Online (Sandbox Code Playgroud)
有什么建议如何简化我的代码?
Run Code Online (Sandbox Code Playgroud)list.groupBy { case (x,y) => (x,y) }
在这里,你将元组解构为它的两个组成部分,只是为了立即重新组装它们,就像以前一样.换句话说:你实际上并没有做任何有用的事情.输入和输出是相同的.这与之相同
list.groupBy { t => t }
Run Code Online (Sandbox Code Playgroud)
这当然只是身份功能,Scala帮助我们提供:
list groupBy identity
Run Code Online (Sandbox Code Playgroud)