Srivignesh
Srivignesh

Reputation: 357

Merge entries in Map without using loop in scala

Could someone suggest a best way to merge entries in map for below use case in scala (possibly without using loop)?

From

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

To

Map(((1,"nocase")->List(2)), ((2,"nocase")->List(3)))

Upvotes: 2

Views: 83

Answers (1)

SCouto
SCouto

Reputation: 7928

You can do it as follows:

map1.groupBy(_._1._1).map{case (key, elements) => ((key, "nocase"), elements.values.reduce(_ intersect _ ))}

With the group you group the elements by the first element of the key, then with the map, you build the new key, with the "nocase" string as in your example. With elements.value you get all the elements for the given keys and you can reduce them with the intersect you get the expected output

Output:

Map[(Int, String),List[Int]] = Map((2,nocase) -> List(3), (1,nocase) -> List(2))

Upvotes: 3

Related Questions