如何将Scala中Map[String, List[(String, Set[String])]]转为Map[String, Set[String]]
解决方案
场景1:每个List仅含一个元素
如果输入Map里的每个List都只有一个(String, Set[String])元素,且该元素的第一个字符串与Map的key一致(如示例中的ABC对应ABC),直接提取List首元素的Set部分即可:
val input: Map[String, List[(String, Set[String])]] = Map("ABC" -> List(("ABC", Set("X")))) val output: Map[String, Set[String]] = input.map { case (key, list) => key -> list.head._2 }
场景2:List包含多个元素,合并所有Set
如果List中有多个元素,需要将所有元素的Set合并为一个整体:
val input: Map[String, List[(String, Set[String])]] = Map("ABC" -> List(("ABC", Set("X")), ("DEF", Set("Y", "Z")))) val output: Map[String, Set[String]] = input.map { case (key, list) => key -> list.flatMap(_._2).toSet }
场景3:List包含多个元素,仅保留与key匹配的元素的Set
如果需要筛选出List中第一个字符串与Map key相同的元素,再提取对应的Set:
val input: Map[String, List[(String, Set[String])]] = Map("ABC" -> List(("ABC", Set("X")), ("DEF", Set("Y")))) val output: Map[String, Set[String]] = input.map { case (key, list) => key -> list.collect { case (`key`, s) => s }.flatten.toSet }
内容的提问来源于stack exchange,提问作者Naomi
相关产品推荐
相关产品推荐

