我有两个元组序列,它们包含一个类型和一个整数作为第一个和第二个值。第二个元组是一个groupBy元组,因为只有一种类型和一种值。第一个元组可以包含具有相同类型和不同值的多个元素。我需要做什么来基于类型groupBy第一个元组并添加属于相同类型的值的结果,然后将其与第二个元组序列聚合。如果第一个序列包含第二个序列中未包含的新元素,则需要将其添加到第二个序列中。
val t1 = Seq[(TypeA, 1), (TypeB, 2), (TypeA, 3), (TypeC, 5)]
val t2 = Seq[(TypeA, 2), (TypeB, 4)]
从上面的例子中,t1需要首先为Type输入,然后添加值,然后给我:
val groupedT1 = Seq[(TypeA, 4), (TypeB, 2), (TypeC, 5)]
现在,分组T1需要以与t2相同的方式添加。我使用groupBy函数作为我的起点并将其应用于t1,它给了我:
t1.groupBy(_._1) // Gave me a Map(TypeA -> ArraySeq((TypeA, 1), (TypeA, 3)), TypeB.... and so on)
为了得到我的结果,我知道我必须在元组上执行mapValues和foldLeft操作,这样我才能得到聚合结果,但我只是无法正确获得语法。任何帮助或任何更好的主意?
答案 0 :(得分:0)
你在这里:
val result = t1.groupBy(_._1).mapValues(_.foldLeft(0)((sum, current) => sum + current._2))