【问题标题】:Scala :- Gatling :- Concatenation of two Maps stores last value only and ignores all other valuesScala :- Gatling :- 两个 Map 的串联仅存储最后一个值并忽略所有其他值
【发布时间】:2014-09-11 21:00:37
【问题描述】:

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

我尝试了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 as 将此可变映射转换为不可变类型

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]]

【问题讨论】:

    标签: scala performance-testing scalaz gatling


    【解决方案1】:

    我能够创建两个 MultiMap,但是当我尝试连接 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
    

    【讨论】:

      【解决方案2】:

      地图中不能有重复的键。

      对于简单的地图,不可能有重复的键,如果地图中有重复的键,则需要最后一个

      但你可以使用 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)
      

      【讨论】:

        【解决方案3】:

        您的问题与连接无关,而是与指标映射的声明有关。 Map 中的单个键不可能有多个值。也许你应该看看这个集合:

        http://www.scala-lang.org/api/2.10.3/index.html#scala.collection.mutable.MultiMap

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2016-06-12
          • 2022-01-11
          • 1970-01-01
          相关资源
          最近更新 更多