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ループは Java とは異なる構文を Scala で使用するため、これは構文エラーです。(コロンは何にも使用しません。代わりに左向きの矢印を使用します。)

コードは次のようになります。

import scala.collection.JavaConversions._

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

foreach()、map() などの関数を使用して、マップのすべての要素に関数を適用できます。したがって、Java の Map.Entry オブジェクトと同じように、Scala でタプルを扱います。

たとえば、次のコードを使用して、マップ内のすべての値をフラッシュできます。

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

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