Fusionner deux maps dans Scala puis additionner les valeurs avec la même clé

Suraj P 30 janvier 2023
  1. Fusion de deux maps dans Scala à l’aide de l’opérateur ++
  2. Fusionner des maps et additionner les valeurs avec la même clé
Fusionner deux maps dans Scala puis additionner les valeurs avec la même clé

Nous verrons comment les Maps sont fusionnées en utilisant ++ dans Scala, puis nous verrons différentes manières de fusionner et de sommer les valeurs avec la même clé avec la méthode modifiée ++ et merged disponible avec HashMap.

Fusion de deux maps dans Scala à l’aide de l’opérateur ++

Syntaxe:

map1.++(map2)

Ici, map2 est fusionné avec map1, et la map résultante est renvoyée en sortie. ++ fusionne les maps, mais élimine les doublons ; la dernière paire clé, valeur est prise en compte chaque fois qu’un conflit survient entre les clés.

Exemple de 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)
    }
}

Production :

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)

On peut observer que la dernière paire clé, valeur c’est-à-dire Tony,77 est considérée en sortie.

Fusionner des maps et additionner les valeurs avec la même clé

Méthode 1 :

Comme utiliser ++ fusionne les maps mais élimine le doublon, l’idée ici est d’abord de convertir les maps en une liste en utilisant toList, puis de les fusionner afin que les doublons soient conservés, puis d’utiliser le groupBy la fonction de la liste pour regrouper les valeurs en fonction des clés et additionner les valeurs pour les mêmes clés.

Exemple de 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)
    }
}

Production :

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)

Méthode 2 :

Utilisation de la méthode merged disponible avec HashMap.

Exemple de 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)
    }
}

Production :

Merged Map with summed up values : Map(Ruby -> 189, Tony -> 127, Ben -> 78)
Auteur: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub