Scala中对元组列表使用groupBy后如何调整输出格式?
解决Scala元组列表分组后提取指定元素的问题
嘿,我明白你的需求啦——你现在用groupBy分组后,得到的是包含完整元组的列表,但你只想保留每个元组里的字符串部分对吧?很简单,只需要在分组之后加一步映射处理就可以了。
先回顾一下你原来的代码:
val a = List((1,"a"), (2,"b"), (3,"c"), (1,"A"), (2,"B")) a.groupBy(e => e._1)
这段代码确实会把相同键的完整元组归到一起,所以输出里每个分组都是元组列表。
要得到你期望的结果,我们可以在groupBy之后,用mapValues方法对每个分组的列表做转换,提取出每个元组的第二个元素:
val a = List((1,"a"), (2,"b"), (3,"c"), (1,"A"), (2,"B")) val desiredResult = a.groupBy(_._1).mapValues(group => group.map(_._2))
或者更简洁的写法(利用Scala的下划线语法):
val desiredResult = a.groupBy(_._1).mapValues(_.map(_._2))
执行这段代码后,你会得到这样的输出:
Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))
这里的类型其实是Map[Int, List[String]],正好匹配你期望的输出结构(你之前写的期望类型里的List[(Int, String)]是笔误哦,实际应该是字符串列表)。
简单拆解一下逻辑:
groupBy(_._1):按元组的第一个Int值分组,得到键为Int、值为元组列表的Map。mapValues(_.map(_._2)):对每个分组的元组列表,遍历每个元组并提取第二个元素(也就是字符串部分),把元组列表转换成字符串列表。
这样就完美得到你想要的结果啦~
内容的提问来源于stack exchange,提问作者user8473984
相关产品推荐
相关产品推荐

