有人可以建议一种最好的方法来合并地图中的条目以用于scala中的以下用例(可能没有使用循环)吗?
发件人
val map1 = Map(((1,"case0")->List(1,2,3)), ((2,"case0")->List(3,4,5)), ((1,"case1")->List(2,4,6)), ((2,"case1")->List(3)))
致
Map(((1,"nocase")->List(2)), ((2,"nocase")->List(3)))
答案 0 :(得分:3)
您可以按照以下方式执行此操作:
map1.groupBy(_._1._1).map{case (key, elements) => ((key, "nocase"), elements.values.reduce(_ intersect _ ))}
使用组,您可以按键的第一个元素对元素进行分组,然后使用地图,使用" nocase"来构建新键。像你的例子中的字符串。使用elements.value可以获得给定键的所有元素,并且可以使用相交来减少它们,从而获得预期的输出
输出:
Map[(Int, String),List[Int]] = Map((2,nocase) -> List(3), (1,nocase) -> List(2))