如何在scala中迭代地将一个映射的值添加到另一个映射?

时间:2014-07-24 13:20:49

标签: scala

var imgResults:Map[String,String] = null

val previewList= LitmusService.checkStatus(testId)

var previewStatus = "false"

previewList.foreach (applicationId => {
  if (previewList.length == 29) {
    imgResults += (LitmusService.fetchResults(applicationId, "full_on"))
    previewStatus = "true"
  }
  else if ((previewList.isEmpty().toString()).equalsIgnoreCase("true")) {
    previewStatus = "falseAll"
  }
  else {
    imgResults += (LitmusService.fetchResults(applicationId, "full_on"))
  }
  contentType = "application/json"
  JsonUtility.toJSONString(Map("status" -> previewStatus, "images" -> imgResults))
})

fetchResults()函数返回Map [String,String]。我需要在foreach循环中添加它返回到地图imgResults的值。但是我收到了一个错误:

Error:(336, 50) type mismatch;
 found   : Map[String,String]
 required: (String, String)
        imgResults += (LitmusService.fetchResults(applicationId, "full_on"))
                                                 ^ 

我该如何解决这个问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您收到类型错误的原因是您尝试添加错误的类型。

fetchResults返回Map+=上的Map运算符不会向另一个Map添加Map,而是添加一个键值配对myMap += (k -> v) myMap += (k, v) // both valid

+=

这意味着您可以执行以下两项操作之一:

继续使用for(kv <- LitmusService.fetchResults(applicationId, "full_on")) { imgResults += kv }

++=

或者是超级懒惰并使用地图连接运算符imgResults ++= LitmusService.fetchResults(applicationId, "full_on") 并执行此操作:

++=

虽然请注意val a = Map('a -> 1, 'b -> 2) val b = Map('c -> 3, 'd -> 4) a ++= b // a is now Map('b -> 2, 'd -> 4, 'a -> 1, 'c -> 3) 没有添加到最后,但考虑到地图的性质,这并不重要:

null

另一件需要注意的事情。从来没有用val imgResults = scala.collection.mutable.Map[String,String]() 进行初始化,这是不安全的,这是非常糟糕的做法。相反,你应该用

实现它
{{1}}