尝试将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)
答案 0 :(得分:3)
flatMap
上的{p> Map[A,B]
将会#34;正常工作"与元组集合:
m.flatMap {case (k,v) => v.map(_ -> k)} // Map[Long,Long]
从Map[Long,Set[Long]]
转到一系列Set[(Long,Long)]
,并将其展平为Map[Long,Long]
。
答案 1 :(得分:1)
澄清一下,看起来你有这个:
firebase.initializeApp(config).
你想在另一张地图中转换这张地图,但是有这样的东西:
Map(10 -> Set(1,2,3), 11 -> Set(4,5))
正如您可以看到这些集合是否不相交,结果地图中的某些键丢失了:
考虑到这一点,代码将如下所示:
Map(1 -> 10,
2 -> 10,
3 -> 10,
4 -> 11,
5 -> 11)
答案 2 :(得分:1)
这会将Map
m
从Map[Long, Set[Long]]
转换为Map[Long, List[Long]]
。
m flatten {case(k, vs) => vs.map((_, k))} groupBy (_._1) mapValues {_.map(_._2)}
您尚未指定当不同Set
值包含某些相同Long
s(即Map(8 -> Set(1,2), 9 -> Set(2,3))
)时应发生的情况。如果你确定没有发生,你可以使用以下调整。
m flatten {case(k, vs) => vs.map((_, k))} groupBy (_._1) mapValues {_.head._2}
甚至更简单:
m.flatten {case(k, vs) => vs.map((_, k))}.toMap
答案 3 :(得分:1)
假设in
是Map[Long, Set[Long]]
:
in./:(Map.empty[Long, Long]) { case (acc, (key, values)) => acc ++ values.map(_ -> key) }