在Scala中的元组列表中使用groupBy

时间:2018-05-20 22:14:47

标签: scala

我尝试在Scala中对元组列表进行分组。

输入:

val a = List((1,"a"), (2,"b"), (3,"c"), (1,"A"), (2,"B"))

我申请了:

a.groupBy(e => e._1)

我得到的输出是:

Map[Int,List[(Int, String)]] = Map(2 -> List((2,b), (2,B)), 1 -> List((1,a), (1,A)), 3 -> List((3,c)))

这与我的期望略有不同:

Map[Int,List[(Int, String)]] = Map(2 -> List(b, B), 1 -> List(a, A)), 3 -> List(c))

我可以做些什么来获得预期的输出?

2 个答案:

答案 0 :(得分:1)

你可能意味着这样的事情:

a.groupBy(_._1).mapValues(_.map(_._2))

或:

a.groupBy(_._1).mapValues(_.unzip._2)

结果:

Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))

答案 1 :(得分:0)

如果您不想使用mapValues,这是您所期望的吗?

 a.groupBy(_._1).map(f => (f._1, f._2.map(_._2)))

结果

Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))