Scala: - Gatling: - 两个Maps的连接仅存储最后一个值,并忽略所有其他值

时间:2014-07-21 11:13:04

标签: scala performance-testing scalaz gatling

我有两个地图,我想连接它们。

我尝试了几乎所有这里给出的示例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]]

3 个答案:

答案 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