2

我正在尝试将以下 Java 代码转换为 Scala:

Map<String, List<String>> allEntriesMap = getEntries();
for (Map.Entry<String, List<String>> allEntriesMapEntry : allEntriesMap
        .entrySet()) {
}

以下是上述 Java 代码的当前 Scala 版本:

var allEntriesMap : Map[String, List[String]] = getEntries();
for (allEntriesMap.entrySet[String, List[String]] allEntriesMapEntry :
        allEntriesMap.entrySet()) {
}

我收到此行错误

for (allEntriesMap.entrySet[String, List[String]] allEntriesMapEntry : 

简单模式的非法开始

如何完成上述代码,以便它执行相同的 Java 功能但用 Scala 编写?

4

3 回答 3

9

问题是您使用了不正确的语法。这

for (allEntriesMap.entrySet[String, List[String]] allEntriesMapEntry : allEntriesMap.entrySet()) {

    }

应该写成:

for (entry: Map.Entry[String, List[String]] <- allEntriesMap.entrySet()) {

}

或者干脆

for (entry <- allEntriesMap.entrySet) {

}

此外,如果您使用 java 集合类型,则必须导入scala.collections.JavaConversions._范围(这会将 java 集合隐式转换为 scala 集合,因此您可以对它们使用所有操作集)。

于 2012-12-06T14:38:08.450 回答
1

这是一个语法错误,因为for循环在 Scala 中使用的语法与在 Java 中不同。(它不使用冒号——而是使用左箭头。)

您的代码应如下所示:

import scala.collection.JavaConversions._

for ((key, value) <- getEntries()) {
  // ...
}
于 2012-12-06T14:38:03.463 回答
0

您可以使用 foreach()、map() 等函数为地图的每个元素应用一些函数。因此,您将在 Scala 中处理元组,就像在 Java 中处理 Map.Entry 对象一样。

例如,您可以使用以下代码刷新地图中的所有值。

var allEntriesMap : Map[String, List[String]] = getEntries()

allEntriesMap.foreach((arg: (String, List[String])) => {arg._2 = List.empty[String]})
于 2012-12-06T14:32:25.703 回答