3

「ScalafortheImpatient」の章と例に続いて、JavaTreeMapをScalaとして使用することに関連する演習がありSortedMapます。Scalaシェルで、私はこれを試しました:

var t: scala.collection.SortedMap[String,Int] = new java.util.TreeMap[String,Int]()

しかし、タイプの不一致に関するエラーメッセージが表示されます。これを行う簡単な方法はありますか?

注:インポートを実行しscala.collection.JavaConversions._てから、これを実行しました。

var t: SortedMap[String,Int] = TreeMap[String,Int]()

これは機能しますが、変数tのタイプは。java.util.SortedMapではなくscala.collection.SortedMapです。

4

2 に答える 2

2

私はその本を読んでいませんが、決心する必要があります。tScalaですかSortedMap、それとも JavaTreeMapですか?

ATreeMapは ではないため、変換せずに変数にSortedMap割り当てることはできません。以下を含むいくつかの変換を行います。SortedMapJavaConversions

implicit def mapAsScalaMap [A, B] (m: Map[A, B]): Map[A, B]
   Implicitly converts a Java Map to a Scala mutable Map.

ただし、に変換するものは何もありませんSortedMap

この変換が不可解に思われる場合、ライブラリの設計者は同意するためJavaConversions、Scala 2.10 では非推奨になり、変換を行うにJavaConvertersは特定の.asScalaメソッドが必要になる が優先されます。

残念ながら、いずれかJavaConvertersを生成するものは何もありませんSortedMap.asScalaを提供しますmutable.Map)。したがって、その要素を使用してコレクションを再構築する必要があります。

import collection.JavaConverters._
import collection.SortedMap
var t: SortedMap[String, Int] =
    SortedMap[String, Int]() ++ new java.util.TreeMap[String,Int].asScala

上記のコードで新しい TreeMap を生成することは、空であるため明らかに少し無意味ですが、既存のものを処理する方法を理解する必要があります。既存のものがない場合はSortedMap、Scala で新しいものを作成してください。

于 2012-08-28T01:55:48.193 に答える
1
import collection._
import JavaConverters._

var t: scala.collection.SortedMap[String,Int] = 
    new java.util.TreeMap[String,Int]().asScala.map(identity)(breakOut)
于 2012-08-28T02:00:14.627 に答える