Scala groupBy mapValues映射回初始格式.有没有更好的办法
发布时间:2020-12-16 19:23:53 所属栏目:安全 来源:网络整理
导读:在我正在进行的项目中,我经常发现自己在做以下模式. 给定一个案例类X(a:A,b:B,c:C,d:Int),以及这样的X的xs列表:List [X], 我想做数据库相当于a,b,c分组,同时用d求和,返回类型为List [X]. 我通常最终做的是 xs.groupBy{case X(a,c,d) = (a,c)).mapValues
在我正在进行的项目中,我经常发现自己在做以下模式.
给定一个案例类X(a:A,b:B,c:C,d:Int),以及这样的X的xs列表:List [X], 我通常最终做的是 xs.groupBy{case X(a,c,d) => (a,c)).mapValues(_.sum).map(((a,c),d)) => X(a,d)) 我的问题是,使用scala标准库还是Scalaz(如果d是带有Monoid实例的任意类型),有更好/更清晰/更惯用的方法吗? 解决方法
我想我知道你想要实现的目标,我找到了一种更短的方法来实现这一点,你不必使用mapValues,然后映射,而是你可以用一个地图做任何事情,如下所示:
case class X(a: String,b: String,c: String,d: Int){ def +(that: X) = X(a,d+that.d) } val list = List(X("1","2","3",4),X("1",5),X("11","22","33",6),9)) list.groupBy{ case X(a,c)}.map{ case (k,v) => X(k._1,k._2,k._3,v.reduce(_ + _).d)} 如果你可以在课堂上使用总和,它会更短更清洁,但减少也不是那么糟糕. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |