【发布时间】:2017-02-03 11:15:40
【问题描述】:
在我正在进行的项目中,我经常发现自己在执行以下模式。
给定一个案例类 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))
我的问题是,使用 scala 标准库或 Scalaz 是否有更好/更清晰/更惯用的方法(如果 d 可能是带有 Monoid 实例的任意类型)?
【问题讨论】:
-
你能发布示例列表和示例输出吗?我不确定你想在这里实现什么目标?
-
稍后会做
-
你可能想看看这个 scalaz 例子:stackoverflow.com/questions/7142514/…
-
就我而言,没有简单的方法可以在“地方”执行分组和映射(不需要中间集合)。 scala 集合上也缺少“zipWith”功能。也许将来会添加它们(java 流允许通过收集器与映射进行分组,但任何使用它们的人都会同意它们的用法不直观)
标签: scala