正在尝试将Map[Long, Set[Long]]转换为Map[Long, Long]。
我试过了,但有编译问题:
m.map(_.swap).map(k => k._1.map((_, k._2)))示例:
Map(10 -> Set(1,2,3), 11 -> Set(4,5))应该变成:
Map(1 -> 10,
2 -> 10,
3 -> 10,
4 -> 11,
5 -> 11)发布于 2017-01-13 06:02:40
假设in是您的Map[Long, Set[Long]]
in./:(Map.empty[Long, Long]) { case (acc, (key, values)) => acc ++ values.map(_ -> key) }发布于 2017-01-13 06:41:52
Map[A,B]上的flatMap将“只处理”元组的集合:
m.flatMap {case (k,v) => v.map(_ -> k)} // Map[Long,Long]从一个Map[Long,Set[Long]]到一系列的Set[(Long,Long)],它被扁平化成一个Map[Long,Long]。
发布于 2017-01-13 04:51:41
为了澄清,看起来你有这个:
Map(10 -> Set(1,2,3), 11 -> Set(4,5))您希望将此映射转换为另一个映射,但使用的内容如下:
Map(1 -> 10,
2 -> 10,
3 -> 10,
4 -> 11,
5 -> 11)正如你所看到的,如果这些集合不是不相交的,那么结果映射中的一些关键字就会丢失:
考虑到这一点,代码将如下所示:
val m: Map[Long, Set[Long]] = Map(10l -> Set(1l,2l,3l), 11l -> Set(4l,5l))
m.map(_.swap).map(k => k._1.map((_, k._2)))
val foo: Iterable[(Long, Long)] = m.flatMap { t =>
val (key, value) = t
value.map(_ -> key)
}
val result: Map[Long, Long] = foo.toMaphttps://stackoverflow.com/questions/41622291
复制相似问题