我正在尝试将以下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编写?
答案 0 :(得分:7)
问题是你使用了不正确的语法。此
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集合,因此您可以对它们使用所有操作集。)
答案 1 :(得分:1)
这是一个语法错误,因为for
循环在Scala中使用的语法与在Java中使用的语法不同。 (它不使用冒号 - 它使用左箭头代替。)
您的代码应如下所示:
import scala.collection.JavaConversions._
for ((key, value) <- getEntries()) {
// ...
}
答案 2 :(得分:0)
您可以使用foreach(),map()等函数为地图的每个元素应用一些函数。因此,您将使用Java中的Map.Entry对象处理Scala中的元组。
E.g。您可以使用以下代码刷新地图中的所有值。
var allEntriesMap : Map[String, List[String]] = getEntries()
allEntriesMap.foreach((arg: (String, List[String])) => {arg._2 = List.empty[String]})