作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我正在做的一个项目中,我经常发现自己在做以下模式。
给定一个案例类 X(a: A, b: B, c:C, d: Int),以及这样一个 X 的列表 xs: List[X],
我想做的数据库等效于按 a、b、c 分组,同时按 d 求和,返回类型为 List[X]。
我通常最终做的是
xs.groupBy{case X(a,b,c,d) => (a,b,c)).mapValues(_.sum).map(((a,b,c),d)) => X(a,b,c,d))
最佳答案
我想我知道你想要实现什么,我找到了一种更短的方法来实现这一点,你不必使用 mapValues,然后映射,相反,你可以用一张 map 完成所有事情,如下所示:
case class X(a: String, b: String, c: String, d: Int){
def +(that: X) = X(a,b,c, d+that.d)
}
val list = List(X("1","2","3",4),X("1","2","3",5),X("11","22","33",6),X("11","22","33",9))
list.groupBy{
case X(a,b,c,d) => (a,b,c)}.map{ case (k,v) => X(k._1, k._2, k._3, v.reduce(_ + _).d)}
关于Scala groupBy + mapValues + 映射回初始格式。有没有更好的办法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42022936/
我是一名优秀的程序员,十分优秀!