# Merging Two Maps in Scala and Then Sum the Values With the Same Key

We will see how `Maps` are merged using `++` in Scala, and then, we will look at different ways to merge and sum the values with the same key with the modified `++` and `merged` method available with HashMap.

## Merging Two Maps in Scala Using the `++` Operator

Syntax:

``````map1.++(map2)
``````

Here map2 is merged with map1, and the resultant `map` is returned as output.`++` does merge the maps, but it eliminates the duplicates; the latest `key, value` pair is considered whenever conflict happens between keys.

Example code:

``````object Main {
def main(args: Array[String])
{
//let's assume a mapping from Student -> marks

val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruth" -> 100, "Ben" -> 78)

println("Map1 : " + map1_english)
println("Map2 : " + map2_maths)

// merging the map
val mergedMap = map1_english.++(map2_maths)

println("Class marks are : " + mergedMap)
}
}
``````

Output:

``````Map1 : Map(Tony -> 50, Ruby -> 89)
Map2 : Map(Tony -> 77, Ruth -> 100, Ben -> 78)
Class marks are : Map(Tony -> 77, Ruby -> 89, Ruth -> 100, Ben -> 78)
``````

It can be observed that the latest `key, value` pair i.e. `Tony,77` is considered in output.

## Merging Maps and Summing the Values With the Same Key

### Method 1:

As using `++` does merge the maps but it eliminates the duplicate, the idea here is first to convert the maps into a list using `toList`, then merge them so that duplicates are preserved, and then use the `group by` the function of the list to group the values based on keys and sum the `values` for same keys.

Example code:

``````object Main {
def main(args: Array[String])
{

val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruby" -> 100, "Ben" -> 78)

val mergedList = map1_english.toList ++ (map2_maths.toList)

println("Merged List : " + mergedList)

val mergedKeys = mergedList.groupBy(_._1).map{case (k,v) => k -> v.map(_._2).sum}

println("Merged Map with summed up values : " + mergedKeys)
}
}
``````

Output:

``````Merged List : List((Tony,50), (Ruby,89), (Tony,77), (Ruby,100), (Ben,78))
Merged Map with summed up values : Map(Ruby -> 189, Ben -> 78, Tony -> 127)
``````

### Method 2:

Using the `merged` method available with HashMap.

Example code:

``````object Main {
def main(args: Array[String])
{
val map1_english = collection.immutable.HashMap("Tony" -> 50, "Ruby" -> 89)
val map2_maths = collection.immutable.HashMap("Tony"->77,"Ruby"-> 100, "Ben"->78)

val merged = map1_english.merged(map2_maths)({ case ((k,v1),(_,v2)) =>(k,v1+v2)})

println("Merged Map with summed up values : " + merged)
}
}
``````

Output:

``````Merged Map with summed up values : Map(Ruby -> 189, Tony -> 127, Ben -> 78)
``````
Write for us
DelftStack articles are written by software geeks like you. If you also would like to contribute to DelftStack by writing paid articles, you can check the write for us page.