如何在Scala等效中转换Java foreach循环?

blu*_*sky 2 java scala scala-java-interop

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

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

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

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

我收到这个错误的行

for (allEntriesMap.entrySet[String, List[String]] allEntriesMapEntry : 
Run Code Online (Sandbox Code Playgroud)

非法启动简单模式

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

om-*_*nom 7

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

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

    }
Run Code Online (Sandbox Code Playgroud)

应该写成:

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

}
Run Code Online (Sandbox Code Playgroud)

或者干脆

for (entry <- allEntriesMap.entrySet) {

}
Run Code Online (Sandbox Code Playgroud)

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

  • 更好地使用`JavaConverters`和`asScala`来更好地控制转换. (7认同)