如何对嵌套元组列表按指定字段分组并对整数项求和
实现方案
- 第一步:先将嵌套的二维列表打平为一维元组列表,使用
flatten方法即可完成。 - 第二步:使用
groupBy方法按元组的前两个元素分组,分组键取每个元组的第一个和第二个元素组成的二元组。 - 第三步:对每个分组内的所有元组,提取第三个整数元素求和,再将分组键和求和结果拼接为新的三元组。
- 第四步:将最终的Map结构转为List即可得到目标结果。
完整代码示例
// 原始输入列表 val originalList = List( List(("hello", "goodbye", 12), ("hello", "goodbye", 15)), List(("hello", "test", 18), ("hello", "test", 20)), List(("something", "different", 30), ("something", "different", 18)) ) // 处理逻辑 val result = originalList .flatten // 打平为一维元组列表 .groupBy(tuple => (tuple._1, tuple._2)) // 按元组前两个元素分组 .map { case ((key1, key2), tupleList) => (key1, key2, tupleList.map(_._3).sum) // 对分组内第三个元素求和生成新三元组 } .toList // 输出结果与预期完全一致:List((hello,goodbye,27), (hello,test,38), (something,different,48)) println(result)
如果需要严格保持原始分组的出现顺序,可以在转List后补充排序逻辑:
val orderedResult = result.sortBy(item => (item._1, item._2))
内容的提问来源于stack exchange,提问作者Computeraar
相关产品推荐
相关产品推荐

