Scala シェルでは、次のようにしました。
import java.util._
import scala.collection.JavaConversions._
val t: SortedMap[String,Int] = new TreeMap[String,Int] () // produces an empty java.util.SortedMap
t("a") = 1; t("b") = 2; t("A") = 3; t("0") = 4
t // prints: res35: java.util.SortedMap[String,Int] = {0=4, A=3, a=1, b=2}, as expected
t foreach println // also prints the (k,v) pairs in the same TreeMap sorted order
ただし、次のステートメントはペアをソートされた順序で出力せず、ハッシュ バケットの順序 (0,4) (b,2) (A,3) (a,1) で出力するように見えます。
for ((k,v) <- t) printf("(%s,%d)%n", k, v)
for および foreach に関連する他の回答では、 for 内包表記は次のように foreach の使用に変換されることになっているようです。
「(p <- e) e0 の for 内包表記は e.foreach { case p => e0 } に変換されます」
しかし、それはここで起こっていることではないようです。
scala TreeMap からscala SortedMapを作成すると、foreach と for の両方が期待どおりにソートされた順序で (k,v) ペアを生成することに注意してください。Java TreeMap が scala 用に変換される方法が異なるようです。
この不一致の理由について何かコメントやアイデアはありますか?