以下示例数据
val combineList = List(("A",12),("B",11),("C",12),("D",14),("E",23),("F",12),("D",53),("C",23),("B",12),("A",22),("E",21),("F",12),("C",21),("B",34),("A",34),("G",67),("D",23),("E",21),("F",12),("D",31),("B",41),("E",14),("F",15),("G",18),("A",11),("C",10),("D",9),("A",13),("E",1),("F",14))
和
val X = 98
现在想要最终输出如下,
第一组按以下所有值
val groupKey = List(Map("A"->List(12,22,34,11,13)),Map("B"->List(11,12,34,41)),Map("C"->List(12,23,21,10)),Map("D"->List(14,53,23,31,9)),
Map("E"->List(23,21,21,14,1)),Map("F"->List(12,12,12,15,14)),Map("G"->List(67,18)))
X
中的第二个减去groupKey
这里的列表值X
总是比列表值更亮,所以第二个输出将是
val substrackValues = List(Map("A"->List(86,76,34,87,85)),Map("B"->List(87,86,34,57)),Map("C"->List(86,75,77,88)),Map("D"->List(84,45,75,31,89)),
Map("E"->List(75,77,77,84,97)),Map("F"->List(86,86,86,15,84)),Map("G"->List(31,80)))
答案 0 :(得分:3)
考虑
combineList.groupBy(_._1).mapValues(xs => xs.map(v => X-v._2))
提供
Map(E -> List(75, 77, 77, 84, 97), F -> List(86, 86, 86, 83, 84), A -> List(86, 76, 64, 87, 85), G -> List(31, 80), B -> List(87, 86, 64, 57), C -> List(86, 75, 77, 88), D -> List(84, 45, 75, 67, 89))
请注意,上面groupKey
中的嵌入式地图是 singleton 地图,可以使用[(String,List[Int])]
的元组表示,甚至可以更好地聚合到一个地图中。
在第一个元组元素分组后的解决方案中,我们将每个列表中的每个元素转换为X
的值。