2017-10-09 1 views
0

Ich mag auf demselben Schlüssel von unten Typ zwei unveränderliche Karten fusionieren:Scala: Zusammenführen von zwei unveränderlichen Karten auf Schlüssel und neue unveränderliche Karte erhalten mit dem gleichen Typ

scala.collection.immutable.HashMap [String, Seq [Zeichenfolge ]]

und Art Rückkehr sollte auch gleich sein: scala.collection.immutable.HashMap [String, Seq [Zeichenfolge]]

zum Beispiel:

scala> map2 
res17: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-2), key2 -> List(value2)) 

scala> map3 
res18: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-3), key3 -> List(value3)) 


merging above two map should be output to: 

Map(key1->List(value1-2,value1-3), key2->List(value2), key3->List(value3)) 

Hinweis: Returned Karte sollte eine Seq von String als Wert nicht Seq von Seq von String haben

+0

Ja, definitiv duplizieren. Die scalaz Antwort auf diese Frage ist dafür noch besser, da es buchstäblich nur 'map2 | + | map3' –

Antwort

2

Sie können zwei Karten wie folgt zusammen:

map2 ++ map3.map{ case (k,v) => k -> (v ++ map2.getOrElse(k,Nil)) } 

Da ++ Operator unveränderlich ist, eine neue Map wird erstellt.

+0

Danke R. Fossati für die schnelle Hilfe .. Ich ziehe nach Scala von Java Hintergrund und konfrontiert harte Zeit als Scala hat ganz unterschiedliche Syntax und shorthands ... –

Verwandte Themen