我需要转换这个结构
val seq = Seq(Seq("a","aa"), Seq("b","bb"), Seq("a", "a2"), Seq("b","b2") )在此地图上:
val map2 = Map ( "a" -> Seq("aa","a2"), "b" -> Seq("bb","b2") )不能使用toMap,因为它只使用Tuple2作为输入。有什么办法吗?
发布于 2018-05-06 15:47:38
您可以首先按每个分节的第一项分组,然后映射所产生的分组值,以便只保留子序列的第二个元素:
Seq(Seq("a","aa"), Seq("b","bb"), Seq("a", "a2"), Seq("b","b2") )
.groupBy(_(0)) // Map(b -> List(List(b, bb), List(b, b2)), a -> List(List(a, aa), List(a, a2)))
.mapValues(_.map(_(1))) // Map(b -> List(bb, b2), a -> List(aa, a2))返回:
Map(b -> List(bb, b2), a -> List(aa, a2))类似的:不使用_(0)和_(1),您也可以使用.groupBy(_.head).mapValues(_.map(_.last))
通过这种方式可以使mapValues部件变得更加明确:
.mapValues{
case valueLists => // List(List(b, bb), List(b, b2))
valueLists.map{
case List(k, v) => v // List(b, bb) => bb
}
}https://stackoverflow.com/questions/50201552
复制相似问题