Я пытаюсь преобразовать ниже Java-код в Scala:
Map<String, List<String>> allEntriesMap = getEntries();
for (Map.Entry<String, List<String>> allEntriesMapEntry : allEntriesMap
.entrySet()) {
}
Вот текущая версия Scala выше кода Java:
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?
Проблема в том, что вы используете неправильный синтаксис. Эта
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, поэтому вы можете использовать для них весь набор операций).
JavaConverters
и asScala
чтобы лучше контролировать преобразования.
Это синтаксическая ошибка, поскольку цикл for
использует в синтаксисе другой синтаксис в Scala, чем в Java. (Он не использует двоеточие для чего-либо - вместо этого использует стрелку с указателем слева).
Ваш код должен выглядеть следующим образом:
import scala.collection.JavaConversions._
for ((key, value) <- getEntries()) {
// ...
}
Вы можете применить некоторую функцию для каждого элемента карты, используя функции foreach(), map() и т.д. Таким образом, вы будете иметь дело с кортежем в Scala, как с объектом Map.Entry в Java.
Например, вы можете использовать следующий код, чтобы очистить все значения на вашей карте.
var allEntriesMap : Map[String, List[String]] = getEntries()
allEntriesMap.foreach((arg: (String, List[String])) => {arg._2 = List.empty[String]})