我有两个地图,我想连接它们。
我尝试了几乎所有这里给出的示例Best way to merge two maps and sum the values of same key?,但它忽略了键metrics
的所有值,并且只存储了最后一个值。
我已下载scalaz-full_2.9.1-6.0.3.jar
并导入import scalaz._
,但这对我不起作用。
如何将这两个映射与多个值连接到相同的键?
修改: -
现在我试过
val map = new HashMap[String, Set[String]] with MultiMap[String, String]
map.addBinding("""report_type""" , """performance""")
map.addBinding("""start_date""" ,start_date)
map.addBinding("""end_date""" , end_date)
map.addBinding("metrics" , "plays")
map.addBinding("metrics", "displays")
map.addBinding("metrics" , "video_starts")
map.addBinding("metrics" , "playthrough_25")
map.addBinding("metrics", "playthrough_50")
map.addBinding("metrics", "playthrough_75")
map.addBinding("metrics", "playthrough_100")
val map1 = new HashMap[String, Set[String]] with MultiMap[String, String]
map1.addBinding("""dimensions""" , """asset""")
map1.addBinding("""limit""" , """50""")
并尝试使用this link作为
将此可变映射转换为不可变类型val asset_query_string = map ++ map1
val asset_query_string_map =(asset_query_string map { x=> (x._1,x._2.toSet) }).toMap[String, Set[String]]
但我还是得到了
i_ui\config\config.scala:51: Cannot prove that (String, scala.collection.immutable.Set[String]) <:< (St
ring, scala.collection.mutable.Set[String]).
11:10:13.080 [ERROR] i.g.a.ZincCompiler$ - val asset_query_string_map =(asset_query_string map { x=> (x
._1,x._2.toSet) }).toMap[String, Set[String]]
答案 0 :(得分:4)
您的问题与串联无关,但与度量图的声明有关。 Map中的单个键不可能有多个值。也许你应该看看这个系列:
http://www.scala-lang.org/api/2.10.3/index.html#scala.collection.mutable.MultiMap
答案 1 :(得分:1)
地图中不能有重复的密钥。
对于简单的地图,不可能有重复的密钥,如果你在地图中有重复的密钥需要最后一个
但您可以使用MultiMap
import collection.mutable.{ HashMap, MultiMap, Set }
val mm = new HashMap[String, Set[String]] with MultiMap[String, String]
mm.addBinding("metrics","plays")
mm.addBinding("metrics","displays")
mm.addBinding("metrics","players")
println(mm,"multimap")//(Map(metrics -> Set(players, plays, displays)),multimap)
答案 2 :(得分:0)
我能够创建两个MultiMaps但是当我尝试连接val final_map = map1 ++ map2
时
我试着在这里给出答案Mutable MultiMap to immutable Map
但我的问题没有解决,我得到了
config\config.scala:51: Cannot prove that (String, scala.collection.immutable.Set[String]) <:< (St
ring, scala.collection.mutable.Set[String]).
最后通过
解决了val final_map = map1 ++ map2
val asset_query_string_map = final_map.map(kv => (kv._1,kv._2.toSet)).toMap