2

このタイプを返すJava APIがあります:

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

scala プログラムでは、上記の型をパラメーターとして、型が

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

}

だから私はバーを次のように呼び出します:

val list = bar(Foo.someJavaMethod())

しかし、コンパイルエラーが発生するため、これは機能しません。

私はこのインポートを持っていると思った

import scala.collection.JavaConversions._ 

Java コレクションと Scala コレクションの間で暗黙的な自動変換を行います。

私も次のように使用してみました:

Foo.someJavaMethod().toList 

しかし、それもうまくいきません。

この問題の解決策は何ですか?

4

1 に答える 1

7

まず、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))
于 2011-07-07T12:00:20.693 に答える