合并Map中的条目而不使用scala中的循环

时间:2018-03-22 06:24:35

标签: scala maps

有人可以建议一种最好的方法来合并地图中的条目以用于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)))

1 个答案:

答案 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))