【发布时间】:2017-08-22 05:01:37
【问题描述】:
我有两个包含案例类对象的列表
case class Balance(id: String, in: Int, out: Int)
val l1 = List(Balance("a", 0, 0), Balance("b", 10, 30), Balance("c", 20, 0))
val l2 = List(Balance("a", 10, 0), Balance("b", 40, 0))
我想总结元组中的元素并组合如下列表
List((Balance(a, 10, 0), Balance(b, 50, 30), Balance(c, 20, 0))
我提供了以下解决方案
// create list of tuples with 'id' as key
val a = l1.map(b => (b.id, (b.in, b.out)))
val b = l2.map(b => (b.id, (b.in, b.out)))
// combine the lists
val bl = (a ++ b).groupBy(_._1).mapValues(_.unzip._2.unzip match {
case (ll1, ll2) => (ll1.sum, ll2.sum)
}).toList.map(b => Balance(b._1, b._2._1, b._2._2))
// output
// List((Balance(a, 10, 0), Balance(b, 50, 30), Balance(c, 20, 0))
他们有更短的方法吗?
【问题讨论】:
标签: scala functional-programming mapreduce monads