2014-02-01 3 views
5

У меня есть два файла. Один из них - scala, а другой - java.Использование scala map в Java

В файле Scala есть функция, которая возвращает неизменяемую карту scala.

Файл Java хочет использовать эту карту в качестве словаря.

Я новичок в scala и java. Как я могу преобразовать эту карту scala в java dicionary?

+0

Является ли ваш проект Java или Scala? –

+0

Его в scala. Я использую sbt для сборки –

+1

. В качестве примечания, вы никогда не должны использовать словарь или Hashtable в новом коде, если не взаимодействовать с древним кодом, который его требует. Вместо этого используйте интерфейс карты (и обычно HashMap). – chrylis

ответ

7

HTH. Легко сделать со стороны Scala.

scala> import collection.JavaConverters._ 
import collection.JavaConverters._ 

scala> val m = Map("one"->1) 
m: scala.collection.immutable.Map[String,Int] = Map(one -> 1) 

scala> val jm = m.asJava 
jm: java.util.Map[String,Int] = {one=1} 

scala> val hm = new java.util.Hashtable(jm) 
<console>:12: error: type mismatch; 
found : java.util.Map[String,Int] 
required: Int 
     val hm = new java.util.Hashtable(jm) 
             ^

scala> import java.util._ 
import java.util._ 

scala> val hm: Dictionary[String,Int] = new java.util.Hashtable(jm) 
hm: java.util.Dictionary[String,Int] = {one=1} 

Edit: Человек, который был болезненным:

import java.util.*; 

public class JavaMapper { 
    public Dictionary<String, Integer> n() { 
     return new Hashtable<String, Integer> (
      (Map<String, Integer>) 
      scala.collection.JavaConverters$.MODULE$.mapAsJavaMapConverter((new ScalaMap().m())) // where m returns a Map, of course 
     ); 
    } 
} 
+0

Я использую библиотеку, написанную на scala. И мой код находится в java. И я не хочу, чтобы какие-либо раздутые вспомогательные функции в файлах scala. –

+0

@ K.K ОК, заберите свой яд. Ред. –

+0

Большое спасибо за ответ. Где получить информацию об этих типах синтаксиса? Любые вести? –

4

Это лучший способ преобразовать Scala immutable.Map в Java Map в Java.

java.util.Map<String, String> javaMap = scala.collection.JavaConverters 
              .mapAsJavaMapConverter(scalaMap).asJava();