Автоматическое преобразование между коллекциями Scala и Java при использовании scala.collection.JavaConversions._ в Scala 2.8. - PullRequest
2 голосов
/ 07 июля 2011

У меня есть Java-API, который возвращает этот тип:

ArrayList[ArrayList[String]] = Foo.someJavaMethod()   

В программе Scala мне нужно отправить вышеуказанный тип в качестве параметра функции scala 'bar', тип которой

def bar(param: List[List[String]]) : List[String] = {

}

поэтому я вызываю bar как:

val list = bar(Foo.someJavaMethod())

, но это не работает, так как я получаю сообщение об ошибке компиляции.

Я думал, что импорт

import scala.collection.JavaConversions._ 

будетделать неявное автоматическое преобразование между коллекциями Java и Scala.

Я также пытался использовать подобные:

Foo.someJavaMethod().toList 

, но это тоже не работает.

Каково решение этогопроблема?

1 Ответ

7 голосов
/ 07 июля 2011

Во-первых, ArrayList не конвертируется в List, он конвертируется в Scala Buffer.Во-вторых, неявное преобразование не будет повторяться в элементах ваших коллекций.

Вам придется вручную сопоставлять внутренние списки.Либо с неявными преобразованиями:

import collection.JavaConversions._
val f = Foo.someJavaMethod()
bar(f.toList.map(_.toList))

Или, более конкретно, если вы предпочитаете:

import collection.JavaConverters._
val f = Foo.someJavaMethod()
bar(f.asScala.toList.map(_.asScala.toList))
...