【问题标题】:How to pass java HashMap in Gatling Feeder如何在 Gatling Feeder 中传递 java HashMap
【发布时间】:2016-08-20 19:39:36
【问题描述】:

我正在尝试调用 Map.canBuildFrom(("dataLine", dataLine));其中data line是HashMap,我要传hashMap,怎么做?

val myCustomFeeder = new Feeder[String] {
  override def hasNext = true
  override def next: Map[String, String] = {
    var dataLine: java.util.HashMap[String, String] = new RandomDataGenerator().getMessageMap(); // this returns a java.util.HashMap
    Map.canBuildFrom(("dataLine", dataLine)); // does not compile.
  }
}

我得到的错误是:

Error:(91, 11) overloaded method value apply with alternatives:
  ()scala.collection.mutable.Builder[(A, B),scala.collection.immutable.Map[A,B]] <and>
  (from: Map.Coll)scala.collection.mutable.Builder[(A, B),scala.collection.immutable.Map[A,B]]
 cannot be applied to ((String, java.util.HashMap[String,String]))
                        Map.canBuildFrom(("dataLine", dataLine));
                            ^

【问题讨论】:

  • “不编译”:你得到了什么错误?
  • 我更新了错误,详情
  • 你为什么要这么做?如果您想将 java 地图转换为 scsala 地图,请使用 scala.collection.JavaConverters

标签: java scala dictionary hashmap gatling


【解决方案1】:

按照@Łukasz 的建议,使用JavaConversions

def next: Map[String, String] = {
  var dataLine: java.util.HashMap[String, String] = ???
  scala.collection.JavaConversions.mapAsScalaMap(dataLine).toMap
}

或者,使用隐式:

def next: Map[String, String] = {
  var dataLine: java.util.HashMap[String, String] = ???
  import scala.collection.JavaConversions._
  dataLine.toMap
}

这里唯一的缺点是,由于您需要返回不可变的Map,因此您必须调用toMap,这实际上是复制了整个地图。

mapAsScalaMap 返回一个 Java map 的包装器,与复制相比,这是一个便宜的操作,所以如果你能做到这一点,你会有更好的性能:

def next: scala.collection.mutable.Map[String, String] = {
  var dataLine: java.util.HashMap[String, String] = ???
  import scala.collection.JavaConversions._
  dataLine
}

【讨论】:

  • @Łukasz:这还没有编译,我尝试修改代码如下所示:` override def next: Map[String,String] = { var dataLine:java.util.HashMap [字符串,字符串] = 新的 RandomDataGenerator().getMessageMap(); scala.collection.JavaConversions.mapAsSca laMap(dataLine).toMap Map.canBuildFrom("dataLine",dataLine)}`
  • Map.canBuildFrom("dataLine",dataLine) 抱怨同样的编译错误
  • @ChanduD,你不需要打电话给Map.canBuildFrom。只需删除该行。 scala.collection.JavaConversions.mapAsScalaMap(dataLine).toMap 给你结果。
  • @ChanduD,我不是 Lukasz,但无论如何欢迎你。
猜你喜欢
  • 2018-11-14
  • 1970-01-01
  • 2022-01-14
  • 2022-08-18
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多